2017-03-09 3 views
0

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

Antwort

1

Sie müssen RequirePkce auf true Sie Client-Konfiguration in IdentityServer einzustellen.

+0

Arbeitete wie erwartet :) Danke, auch für diesen tollen Rahmen! – DotnetProg

Verwandte Themen