Identity Server 4 и Google Chrome Аутентификация на Asp. Net MVC 5 - PullRequest
1 голос
/ 27 марта 2020

У нас есть приложение, созданное с использованием ASP. NET MVC 5, которое станет частью решения для аутентификации с использованием единого входа, выполненного с использованием Identity Server 4, реализации Skoruba. Он работает в Microsoft Edge и Firefox, но в Google Chrome я получаю сообщение об ошибке с

IDX21323: RequireNonce равен «[PII скрыт]». OpenIdConnectProtocolValidationContext.Nonce был нулевым, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce не был нулевым. Одноразовый номер не может быть подтвержден. Если вам не нужно проверять одноразовый номер, установите OpenIdConnectProtocolValidator.RequireNonce в значение «false». Обратите внимание, что если найдено «nonce», оно будет оценено.

Я искал в Интернете информацию об ошибке и обнаружил, что Chrome не может прочитать внешнюю кухню ie для аутентификация, но я не уверен, правильно ли я понимаю. Я попытался добавить метод app.UseExternalSignInCookie(..), чтобы приложение могло его прочитать, но пока не принесло хороших результатов.

Ниже приведен код, который мы сделали для реализации единого входа на ASP. NET MVC 5 аутентификация:

private static void UseSingleSignOnAuthentication(this IAppBuilder app)
{
    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
    });

    app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

    app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
    {
        ClientId = "..", // the client id generated on Skoruba portal
        ClientSecret = "..", // the client secret generated on Skoruba portal
        Authority = "..", // the base address to the STS Skoruba
        RedirectUri = "..", // Url of this application
        PostLogoutRedirectUri = "..", // Url of this application
        ResponseType = "code id_token",
        Scope = "openid email profile",
        RequireHttpsMetadata = false,
        UseTokenLifetime = false,
        SignInAsAuthenticationType = "Cookies",
        SaveTokens = true,

        Notifications = new OpenIdConnectAuthenticationNotifications
        {
            AuthorizationCodeReceived = async notification =>
            {
                var tokenClient = new TokenClient(SsoSettings.TokenEndpoint,
                    SsoSettings.ClientId,
                    SsoSettings.ClientSecret);

                var tokenResponse = await tokenClient.RequestAuthorizationCodeAsync(notification.Code, notification.RedirectUri);

                var userInfoClient = new UserInfoClient(SsoSettings.UserInfoEndpoint);
                var userInfoResponse = await userInfoClient.GetAsync(tokenResponse.AccessToken);

                var auth = userInfoResponse.Auth(tokenResponse, notification);
                AuthHelper.FillUpUserInfo(auth);

                // authenticate user with Owin and define claims from user and SSO based on userInfoResponse
                var user = AuthHelper.Login(tokenResponse, userInfoResponse);

                if (user == null)
                    thrown newException ( .... );
            },
            RedirectToIdentityProvider = n => { /* logout code */ }
        }
    });
}

Экран желтой ошибки:

enter image description here

Am I что-то не хватает в этом процессе аутентификации?

Спасибо.

...