Payload Signing¶
Mit Payload Signing kann ein beliebiger Payload (Dictionary) in einen JWT-Token verpackt werden. Das Erstellen eines Tokens kann entweder über die Admin-Seite oder durch einen API-Aufruf eines berechtigten Clients erfolgen.
JWT-Token über die Admin-Seite¶
Um als Administrator einen JWT-Token zu erzeugen, navigiert man auf der Admin-Seite
zum Bereich Sign Payload UI.
Hier kann ein Payload (Dictionary) im JSON-Format angegeben werden, aus dem ein Token erzeugt wird:
Der erzeugte Token enthält dann die folgenden Informationen:
JWT-Token über die Signing API¶
Über die Signing API kann ein berechtigter Client JWT-Tokens mit benutzerdefiniertem Payload erstellen. Folgende Voraussetzungen müssen dafür erfüllt sein:
API Resource einrichten¶
Zunächst muss die API Resource eingerichtet werden (falls noch nicht vorhanden).
Wechseln Sie dazu auf der Admin-Seite in den Bereich Resources (Identity & APIs) und dort
zum Menüpunkt API Resources. Hier muss eine API Resource mit dem Namen signing-api
angelegt werden. Falls diese Resource noch nicht vorhanden ist, kann sie einfach
über den Bereich Add default API Resource hinzugefügt werden:
Bemerkung
Unter Scopes muss für diese API Resource ein Scope signing-api vorhanden sein.
Dieser Scope sollte beim Hinzufügen automatisch erstellt worden sein. Falls nicht, muss er manuell
hinzugefügt werden.
API Client erstellen¶
Als Nächstes muss ein Client erstellt werden, der Zugriff auf die Signing API erhält.
Dazu wechseln Sie auf der Admin-Seite in den Bereich Clients und legen dort einen API Client
an:
Für den Client muss unter Client Secrets ein Secret festgelegt werden, das der Client später übermitteln muss,
um ein Token abzurufen.
Unter dem Menüpunkt Scopes muss für diesen Client der API Scope signing-api hinzugefügt
werden:
Token über HTTP Request erstellen¶
Zuerst muss ein gültiger Bearer Token abgerufen werden:
POST https://localhost:44300/connect/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=signing-client
&client_secret=secret1
&scope=signing-api
Wenn ein Access Token zurückgegeben wird, kann dieses Token verwendet werden, um den Token zu erstellen:
POST https://localhost:44300/api/signing
Authorization: Bearer eyJhbGciOiJSUzI1N...
Content-Type: application/x-www-form-urlencoded
name=doc1
&hash=1234567890
Token über IdentityServerNET.Clients abrufen¶
Das NuGet-Paket IdentityServerNET.Clients bietet folgende Methoden,
um auf die Signing API zuzugreifen:
dotnet add package IdentityServerNET.Clients
using IdentityServerNET.Clients;
// ...
string issuerAddress = "https://localhost:44300",
clientId = "signing-client",
clientSecret = "secret";
var singingApiClient = new SigningApiClient(clientId, clientSecret);
var signingResponse = await singingApiClient.SignData(issuerAddress, new NameValueCollection()
{
{ "name", "doc1" },
{ "hash", "1234567890" }
});
if (signingResponse.Succeded == false)
{
throw new Exception($"Signing response error: {signingResponse.ErrorMessage}");
}
var token = signingResponse.SecurityToken
Token validieren¶
Ein Token aus der Signing API kann an eine Anwendung übergeben werden. Diese Anwendung kann
die Gültigkeit des Tokens prüfen und einzelne Claims abfragen. .NET Core bietet dafür
verschiedene Möglichkeiten. Einige Methoden sind ebenfalls im NuGet-Paket
IdentityServerNET.Clients enthalten.
string issuerAddress = "https://localhost:44300",
token = "...",
// Validate a token and get a claim
var hash = await SigningApiClient.GetValidatedClaimFromToken(
token,
issuerAddress,
"hash"
);
// or
var dictionay = await SigningApiClient.GetValidatedClaimsFromToken(
token,
issuerAddress,
["name", "hash"]
);