2017-02-09 48 views
5

Używam serwera tożsamości 4 i próbuję użyć punktu końcowego introspekcji, ale tylko przez dokumenty, których nie otrzymuję.Jak poprawnie używać punktu końcowego introspekcji z serwerem tożsamości 4?

Docs tylko daje ten przykład

POST /connect/introspect 
Authorization: Basic xxxyyy 

token=<token> 

Teraz, dlaczego nie jest to podstawowe uwierzytelnianie i co powinno być xxxyyy? Mam na myśli, że w mojej aplikacji nie ma podstawowego zestawu auth. Właśnie konfiguracji Identity Server 4 przy użyciu ASP.NET Rdzeń następująco: ConfigureServices w

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

iw Configure

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

Teraz Próbowałem tylko Posta do/connect/introspekcji z ciało tylko token=<token>, ale zwróciło 404.

Wierzę, że naprawdę tego nie rozumiem.

Jak używać punktu końcowego introspekcji z serwerem Identity 4 w środowisku ASP.NET Core?

+0

Co próbujesz osiągnąć za pomocą punktu końcowego introspekcji? –

+1

Próbuję zweryfikować ważność tokena. Mam na myśli, że token mógł wygasnąć lub po prostu nie może być ważnym tokenem. Chcę móc to zweryfikować za pomocą. Trochę przeszukując odkryłem, że punkt końcowy introspekcji jest sposobem na zrobienie tego, ale tak naprawdę nie wiem, jak się go używa. – user1620696

Odpowiedz

3

Introspekcja jest zwykle używana przez interfejsy API do sprawdzania poprawności przychodzącego tokena. Również punkt końcowy introspekcji wymaga uwierzytelnienia na specyfikację.

Musisz skonfigurować tajemnicę API:

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

a następnie użyć API nazwisko/tajemnicę uwierzytelnić przed końcowym introspekcji. Albo użyj podstawowego uwierzytelniania, albo zaksięguj wartości w formularzu.

+4

OP: Aby nieco rozszerzyć odpowiedź @leastprivilege: chcesz base64 zakodować ciąg '" [nazwaApp]: [yourApiSecret] "' ​​i użyć go jako nagłówka 'license'' Authorization'. – Mashton

0

Implementacja IdSvr4 jest fantastyczna, ale dokumenty pozostawiają wiele do życzenia - spędziłem dobrą godzinę szukając w Internecie, aby móc wymyślić działające rozwiązanie. Powiedzenie "przeczytaj specyfikację" nie zawsze jest pomocne, jeśli nie znasz się na koncepcji - co dzieje się na ich forach.

Więc - co musisz przekazać do POST /connect/introspect jest sekretem zakresu .

Możesz skonfigurować quickstarts, zmieniając klasę config.cs. Będziesz musiał zaktualizować dowolny magazyn danych, którego używasz, jeśli dostosowałeś go lub nie używasz szybkiego startu - ale koncepcja powinna (miejmy nadzieję) być jasna.

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") 
       } 
      } 
     }; 
    } 

teraz ...
1. Upewnij się, że klient ma zakres MY_CUSTOM_SCOPE
2. Upewnij się, że zwrócił się do zakresu MY_CUSTOM_SCOPE gdy coraz okaziciela token.

Teraz, zrób skrót SHA256 nazwy zasobów czynnych i tajemnicy tak:

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

Jeżeli nazwa użytkownika i hasło jest MyResource jest tekstem jawnym hello (obv użyć własnych wartości.!) - należy skończyć z łańcucha, który wygląda tak: TXlSZXNvdXJjZTpoZWxsbw==

Teraz można dodawać do IDSvr4 ...

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

token=<YOUR_TOKEN> 

Tak, tak długo jak na okaziciela żeton ma zakres MY_CUSTOM_SCOPE (lub cokolwiek w końcu to nazwałem) - powinieneś być teraz w stanie użyć do introspekcji punktu końcowego IdSvr, aby uzyskać informacje na jego temat.

Nadzieję, że pomaga!