4

Я пытаюсь получить ядро ​​ASP.Net для проверки подлинности с помощью Thinktecture V2 uising OpenID Connect (нам в настоящее время требуется WS-Trust, поэтому обновление не может быть обновлено).Настройка ядра ASP.Net для проверки подлинности с использованием OIDC против Thinktecture V2

Моя конфигурация выглядит следующим образом

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

Когда я пытаюсь и аутентифицировать я получаю следующее исключение:

HttpRequestException: Ответ код состояния не указывает успех : ошибка 400, неверный запрос).

След от thinktectureIdentityServer.svclog является

enter image description here

Если кто-то может дать какой-либо помощи было бы весьма признателен.

ответ

0

Я преодолел вышеуказанную ошибку, обработав OnAuthorizationCodeReceivedEvent и вручную обработав выкуп кода, в котором я добавил заголовок базовой авторизации для авторизации клиента.

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

    ... 

}); 

Чтобы сделать окончательный вызов для извлечения USERINFO я должен был сделать изменяет идентификатор сервера, чтобы включить объект в ответ, который соответствует объект в Id токена. Это включало обновление UserInfoController для добавления претензии в метод Get.