wake-up-neo.com

Wie verwende ich den Introspection-Endpunkt mit Identity Server 4 richtig?

Ich verwende Identity Server 4 und versuche, den Introspection-Endpunkt zu verwenden, aber nur anhand der Dokumentation erhalte ich ihn nicht.

Die Dokumentation gibt nur dieses Beispiel

POST /connect/introspect
Authorization: Basic xxxyyy

token=<token>

Nun, warum gibt es diese grundlegende Authentifizierung und was sollte xxxyyy sein? Ich meine, in meiner App ist keine grundlegende Authentifizierung festgelegt. Ich habe gerade Identity Server 4 mit ASP.NET Core wie folgt in der ConfigureServices eingerichtet:

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

und in Configure

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

Jetzt habe ich nur ein POST versucht, um/connect/introspect mit dem Körper nur token=<token>, aber es gab eine 404 zurück.

Ich glaube, ich habe es wirklich nicht verstanden.

Wie verwenden wir den Introspection-Endpunkt mit Identity Server 4 in ASP.NET Core?

13
user1620696

Die Implementierung von IdSvr4 ist fantastisch, aber die Dokumente lassen viel zu wünschen übrig - ich habe eine gute Stunde damit verbracht, im Internet nach einer funktionierenden Lösung zu suchen. Wenn Sie aufgefordert werden, die Spezifikation zu lesen, ist dies nicht immer hilfreich, wenn Sie mit einem Konzept noch nicht vertraut sind - was in den Foren häufig vorkommt.

Was Sie also an POST /connect/introspect übergeben müssen, ist ein scope secret .

Sie können die Schnellstarts konfigurieren, indem Sie die config.cs-Klasse ändern. Sie müssen den verwendeten Datastore aktualisieren, wenn Sie ihn angepasst haben oder den Schnellstart nicht verwenden. Das Konzept sollte jedoch (hoffentlich) klar sein.

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

Jetzt...
1. Stellen Sie sicher, dass Ihr Client den Geltungsbereich MY_CUSTOM_SCOPE hat.
2. Stellen Sie sicher, dass Sie den Gültigkeitsbereich MY_CUSTOM_SCOPE angefordert haben, wenn Sie ein Trägertoken erhalten.

Erstellen Sie nun eine Base64-codierte Zeichenfolge des API-Ressourcennamens und geben Sie Folgendes geheim ein:

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

Der Benutzername ist MyResource und das Kennwort ist Klartext hello (obv. Verwenden Sie Ihre eigenen Werte!) - sollte mit einer Zeichenfolge enden, die wie folgt aussieht: TXlSZXNvdXJjZTpoZWxsbw==

Jetzt können Sie auf IDSvr4 posten ...

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

token=<YOUR_TOKEN>

Solange Ihr Trägertoken den Gültigkeitsbereich MY_CUSTOM_SCOPE (oder wie auch immer Sie es letztendlich auch aufgerufen haben) hat, sollten Sie jetzt den Introspection-Endpunkt von IdSvr verwenden können, um Informationen darüber zu erhalten. 

Hoffentlich hilft das!

16
Jay

Introspection wird normalerweise von APIs verwendet, um ein eingehendes Token zu überprüfen. Auch der Introspection-Endpunkt erfordert eine Authentifizierung pro Spezifikation.

Sie müssen ein API-Geheimnis einrichten:

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

Verwenden Sie dann den Namen/das Geheimnis der API, um sich gegen den Introspektionsendpunkt zu authentifizieren. Verwenden Sie entweder die Standardauthentifizierung oder buchen Sie die Werte im Formular.

5
leastprivilege

@Jays Antwort oben hat mir sehr geholfen. In meinem Fall hatte ich vergessen, den Inhaltstyp nach RFC 7662 in URL-kodiert zu ändern. 

r.Header.Add("Content-Type", "application/x-www-form-urlencoded")
0
Mo-Gang