2017-02-09 16 views
5

Я использую Identity Server 4, и я пытаюсь использовать конечную точку интроспекции, но только по документам я ее не получаю.Как правильно использовать конечную точку интроспекции с сервером идентификации 4?

Документы просто дают этого пример

POST /connect/introspect 
Authorization: Basic xxxyyy 

token=<token> 

Теперь, почему существует эта базовая аутентификация и что должно быть xxxyyy? Я имею в виду, что в моем приложении нет базового набора auth. Я только настройки Сервер идентификации 4 с помощью ASP.NET Сердечник следующим образом в ConfigureServices:

services.AddIdentityServer() 
      .AddTemporarySigningCredential() 
      .AddInMemoryApiResources(ApiResourceProvider.GetAllResources()) 
      .AddAspNetIdentity<Usuario>(); 

и в Configure

app.UseIdentity(); 
app.UseIdentityServer(); 

Теперь я попытался просто POST к/подключения/самоанализом с корпус только token=<token>, но он вернулся 404.

Я считаю, что я действительно не понял.

Как использовать конечную точку интроспекции с помощью Identity Server 4 в ASP.NET Core?

+0

Что вы пытаетесь достичь с помощью конечной точки интроспекции? –

+1

Я пытаюсь проверить действительность токена. Я имею в виду, что токен мог истек или он просто не может быть действительным токеном. Я хочу проверить это. В поисках немного я узнал, что конечная точка интроспекции - это способ сделать это, но я не понимаю, как она используется. – user1620696

ответ

3

Интроспекция обычно используется API для проверки входящего токена. Кроме того, конечная точка интроспекции требует проверки подлинности на спецификацию.

Вам нужно настроить АНИ секрет:

https://identityserver4.readthedocs.io/en/release/reference/api_resource.html

, а затем использовать апи имя/секрет для аутентификации на самоанализ конечную точку. Либо использование обычной проверки подлинности, либо публикация значений в форме.

+4

OP: немного расширить ответ на @leastprivilege: вы хотите, чтобы base64 закодировал строку '' [yourApiName]: [yourApiSecret] "' ​​и использовал это как значение '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – Mashton

0

Реализация IdSvr4 является фантастической, но документы оставляют желать лучшего - я потратил хороший час на поиск в Интернете, чтобы иметь возможность найти рабочее решение. Говорить «читать спецификацию» просто не всегда полезно, если вы новичок в концепции - это то, что происходит на их форумах.

Итак, что вам нужно сделать, чтобы перейти на POST /connect/introspect является сфера секретный.

Вы можете настроить стартовые старты, изменив класс config.cs. Вам нужно будет обновить любое хранилище данных, которое вы используете, если вы его настроили или не используете быстрый старт, но концепция должна (надеюсь) быть ясной.

public static IEnumerable<ApiResource> GetApiResources() 
    { 
     return new List<ApiResource> 
     { 
      new ApiResource("MyResource", "My_Resource_DisplayName") 
      { 
       ApiSecrets = new List<Secret> 
       { 
        new Secret("hello".Sha256()) 
       }, 
       Scopes= 
       { 
        new Scope("MY_CUSTOM_SCOPE") 
       } 
      } 
     }; 
    } 

Теперь ...
1. Убедитесь, что клиент имеет объем MY_CUSTOM_SCOPE
2. Убедитесь, что вы запросили объем MY_CUSTOM_SCOPE при получении маркера носителя.

Теперь сделайте SHA256 хэш имени ресурса апи и тайны, как это:

Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", userName, password)));

Где имя пользователя является MyResource и пароль открытым текстом hello (OBV использовать свои собственные значения.!) - должен в конечном итоге со строкой, которая выглядит следующим образом: TXlSZXNvdXJjZTpoZWxsbw==

Теперь вы можете отправлять сообщения IDSvr4 ...

POST /connect/introspect 
Authorization: Basic TXlSZXNvdXJjZTpoZWxsbw== 
Accept: application/json 
Content-Type: application/x-www-form-urlencoded 

token=<YOUR_TOKEN> 

Таким образом, до тех пор, как ваш маркер предъявитель имеет объем MY_CUSTOM_SCOPE (или любой другой вы в конечном итоге назовете это) - теперь вы сможете использовать для интроспекции конечную точку IdSvr, чтобы получить информацию об этом.

Надеюсь, что это поможет!