4

J'essaye d'obtenir un ASP.Net Core pour l'authentification contre Thinktecture V2 en utilisant OpenID Connect (nous avons actuellement besoin de WS-Trust donc nous ne pouvons pas mettre à jour).Configuration d'ASP.Net Core pour l'authentification en utilisant OIDC contre Thinktecture V2

Ma configuration est la suivante

 app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

     X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
     certStore.Open(OpenFlags.ReadOnly); 

     var cert = certStore.Certificates.Find(X509FindType.FindByThumbprint, "CertThumbprint", false); 

     app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
     { 
      RequireHttpsMetadata = false, 
      ClientId = _config["OpenID:ClientId"], 
      ClientSecret = _config["OpenID:ClientSecret"], 
      Authority = _config["OpenID:Authority"], 
      ResponseType = OpenIdConnectResponseType.Code, 
      PostLogoutRedirectUri = _config["OpenID:PostLogoutRedirectUri"], 
      SignInScheme = "Cookies", 
      CallbackPath = "/signin-oidc", 
      TokenValidationParameters = new TokenValidationParameters() 
      { 
       IssuerSigningKey = new X509SecurityKey(cert[0]),         
      }, 
      Configuration = new OpenIdConnectConfiguration 
      { 

       Issuer = "https://identityserver/IdentityServer/issue", 
       AuthorizationEndpoint = "https://identityserver/IdentityServer/issue/oidc/authorize", 
       TokenEndpoint = "https://identityserver/IdentityServer/issue/oidc/token", 
       UserInfoEndpoint = "https://identityserver/IdentityServer/issue/oidc/userinfo", 

      } 
     }); 

config.json

"OpenID": { 
"ClientId": "Test", 
"ClientSecret": "{6DD502AB-2AB1-4028-BD4A-85C91790EC7B}", 
"Authority": "https://identityserver/IdentityServer/issue/oidc", 
"PostLogoutRedirectUri": "https://localhost:44353/" } 

Lorsque je tente et je reçois authentifie l'exception suivante:

HttpRequestException: Réponse du code d'état n'indique pas le succès : 400 (Mauvaise demande).

La trace de thinktectureIdentityServer.svclog est

enter image description here

Si quelqu'un pourrait fournir une aide, il serait grandement apprécié.

Répondre

0

J'ai passé l'erreur ci-dessus en manipulant la OnAuthorizationCodeReceivedEvent et la poignée manuellement le rachat de code, dans lequel j'ai ajouté un en-tête d'autorisation de base pour autoriser le client.

new OpenIdConnectOptions 
{ 
    ... 

    Events = new OpenIdConnectEvents 
    { 
     OnAuthorizationCodeReceived = async context => 
     { 
      context.HandleCodeRedemption(); 

      var requestMessage = new HttpRequestMessage(HttpMethod.Post, context.Options.Configuration.TokenEndpoint); 

      requestMessage.Content = new FormUrlEncodedContent(context.TokenEndpointRequest.Parameters); 

      var authString = string.Format("{0}", Convert.ToBase64String(Encoding.ASCII.GetBytes(_config["OpenID:ClientId"] + ":" + _config["OpenID:ClientSecret"]))); 

      requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authString); 

      var responseMessage = await context.Backchannel.SendAsync(requestMessage); 

      responseMessage.EnsureSuccessStatusCode(); 
      var tokenResonse = await responseMessage.Content.ReadAsStringAsync(); 
      var jsonTokenResponse = JObject.Parse(tokenResonse); 
      context.TokenEndpointResponse = new OpenIdConnectMessage(jsonTokenResponse); 
     } 
    } 

    ... 

}); 

Pour prendre la décision finale pour récupérer le UserInfo que je devais modifier le serveur d'identité pour inclure un sujet dans la réponse qui correspond au sujet dans le Id Token. Cela impliquait la mise à jour de UserInfoController pour ajouter une revendication dans la méthode Get.