У нас есть приложение, созданное с использованием 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 */ }
}
});
}
Экран желтой ошибки:
Am I что-то не хватает в этом процессе аутентификации?
Спасибо.