2017-03-16 2 views
0

Ich erhalte eine ungültige Gewährung, wenn ich versuche, mich von meiner WinForms App auf IS4 einzuloggen.Anmeldung mit WinForms App auf IdentityServer4 mit IdentityModel.OidcClient2 nicht möglich

Dies ist der Server-Log:

fail: IdentityServer4.Validation.TokenRequestValidator[0] 
     Unexpected code_verifier: 12a783b32873a5b4ae0eb7113a067cd978d3d345a8cb29cc0a1a6df131c5839a 
fail: IdentityServer4.Validation.TokenRequestValidator[0] 
     { 
     "ClientId": "las", 
     "ClientName": "LAS.NET Client", 
     "GrantType": "authorization_code", 
     "AuthorizationCode": "e301575cc20f47acf7c15178310f776642a7a30cf2b6a05f54702097b1645b7a", 
     "Raw": { 
      "grant_type": "authorization_code", 
      "code": "e301575cc20f47acf7c15178310f776642a7a30cf2b6a05f54702097b1645b7a", 
      "redirect_uri": "http://localhost/winforms.client", 
      "code_verifier": "12a783b32873a5b4ae0eb7113a067cd978d3d345a8cb29cc0a1a6df131c5839a", 
      "client_id": "las", 
      "client_secret": "secret" 
     } 
     } 

Die LoginResult.Error sagt "invalid_grant".

Dies ist der Client-Setup:

new Client 
{ 
    ClientId = "las", 
    ClientName = "LAS.NET Client", 
    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials, 



ClientSecrets = 
    { 
     new Secret("secret".Sha256()) 
    }, 

    AllowedScopes = new List<string> 
    { 
     IdentityServerConstants.StandardScopes.OpenId, 
     IdentityServerConstants.StandardScopes.Profile, 
     IdentityServerConstants.StandardScopes.Email, 
     IdentityServerConstants.StandardScopes.Phone, 
     "api1" 
    }, 

    RedirectUris = { "http://localhost/winforms.client" }, 

    AllowOfflineAccess = true,     
    RequireConsent = false 
}, 

und das ist, wie ich meinen Winform app initialisieren:

var options = new OidcClientOptions 
{ 
    Authority = "http://localhost:5000", 
    ClientId = "las", 
    ClientSecret = "secret", 
    RedirectUri = "http://localhost/winforms.client", 
    Scope = "openid profile api1 offline_access",  
    Browser = new WinFormsEmbeddedBrowser(), 
    Flow = OidcClientOptions.AuthenticationFlow.Hybrid 
}; 

_oidcClient = new OidcClient(options); 

Wie kann ich dieses Problem beheben?

+0

Ist 'authorization_code' Grant-Typ von 'HybridAndClientCredentials' getrennt –

+0

@ johnny5 Hybrid ist ein Super-Satz von Autorisierung Code Grant. – Lutando

Antwort

2

Ihr WinForms-Client teilt IdentityServer mit, dass er PKCE ausführen möchte, aber der Client sieht nicht so aus, als würde PKCE benötigt. Fügen Sie in Ihrer Clientkonfiguration/-konfiguration RequirePkce = true hinzu.

Verwandte Themen