Ich versuche, native Clients (.NET-Konsolen-Anwendungen als ein Mock-up zuerst) zu implementieren mit OpenID Connect gegen IdentityServer4 als mein STS zu authentifizieren . Ich benutze IdentityModel.OidcClient2 als meine Client-Bibliothek.
Ich entschied mich, den Code-basierten Authentifizierungsablauf zu implementieren.
Ich bin in der Lage durch die Authentifizierungsstufe passieren, aber wenn ich auf die Berechtigungsstufe erhalten erhalte ich eine Fehlermeldung auf dem Client"Unerwarteter code_verifier" beim Versuch, Autorisierung in Hybrid-Flow (mit PKCE) mit IdentityServer4
invalid_grant
Am IdentityServer sagte die Fehlermeldung
"Unexpected code_verifier: XXXXXXXXXXX ...."
Auch wenn ich Fiddler öffnen und auf die Anfragen und die Debug-Informationen schauen - der Code-Verifier an den IdentityServer für die Autorisierung gesendet scheint als der Client zunächst in der AuthorizationState
Klasse generiert.
Wenn ich mit AuthorizationState.CodeVerifier = null
ausführen, dann funktioniert es.
Aber ich möchte die PKCE für zusätzliche Sicherheit implementieren. Wie kann ich das erreichen? Hier
ist die Konfiguration dieses bestimmten Client
Identity Server:
new Client
{
ClientId = "nativeapp1",
ClientName = "Native App Demo - 1",
AllowedGrantTypes = GrantTypes.Hybrid,
RequireConsent = true,
ClientSecrets =
{
new Secret("some-secret1".Sha256())
},
AllowedScopes = {
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.OfflineAccess,
"custom.name",
"api1"
},
RedirectUris = {"http://127.0.0.1:7890/"},
//PostLogoutRedirectUris = {"" }
AllowOfflineAccess = true
}
Und die Client-Konfiguration
var options = new OidcClientOptions
{
Authority = _authority,
ClientId = "nativeapp1",
RedirectUri = redirectUri,
Scope = "openid profile api1 custom.name offline_access",
FilterClaims = true,
LoadProfile = false,
Flow = OidcClientOptions.AuthenticationFlow.Hybrid,
ClientSecret = "some-secret1"
};
Arbeitete wie erwartet :) Danke, auch für diesen tollen Rahmen! – DotnetProg