4

ASP.Net Core を取得して、OpenID Connect を使用して Thinktecture V2 に対して認証しようとしています (現在、WS-Trust が必要なため、アップグレードできません)。

私の構成は次のとおりです

        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 (Bad Request)。

thinktectureIdentityServer.svclog からのトレースは次のとおりです。

ここに画像の説明を入力

誰かが何か助けを提供できれば、それは大歓迎です。

4

1 に答える 1

0

OnAuthorizationCodeReceivedEvent を処理することで上記のエラーを回避し、クライアントを承認する Basic Authorization ヘッダーを追加したコード引き換えを手動で処理しました。

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 を取得するための最後の呼び出しを行うには、Identity Server を変更して、ID トークンのサブジェクトと一致するサブジェクトを応答に含める必要がありました。これには、UserInfoController を更新して、Get メソッドにクレームを追加することが含まれていました。

于 2016-09-13T15:12:06.233 に答える