我在我的azure网站上使用OpenIdConnect身份验证(azure active directory,c#,MVC),我随机收到此错误
IDX10311:requireNonce为true(默认值),但validationContext.Nonce为null。 nonce无法验证。如果您不需要检查现时,请将OpenIdConnectProtocolValidator.RequireNonce设置为false
我正在使用KentorOwinCookieSaver,据我所知,这是解决这个问题的方法,但显然我错了,因为它一直在发生。我怎么能阻止这个?
在ConfigureAuth方法中,我有这一行
app.UseKentorOwinCookieSaver();
答案 0 :(得分:1)
根据您的说明,我按照此tutorial使用此code sample来检查此问题。身份验证中间件的初始化如下所示:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri,
RedirectUri = postLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = context =>
{
context.HandleResponse();
context.Response.Redirect("/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
}
}
});
在记录时使用fiddler捕获网络跟踪,您可以在OpenID Connect中间件启动身份验证请求之前找到OpenIdConnect.nonce cookie,如下所示:
用户输入凭据并同意权限后,authorization_code
,id_token
,state
将发布到您指定的 RedirectUri ,然后进行一些验证执行并生成新cookie并删除以前的OpenIdConnect.nonce cookie,如下所示:
IDX10311:requireNonce为true(默认值),但validationContext.Nonce为null。 nonce无法验证。如果您不需要检查现时,请将OpenIdConnectProtocolValidator.RequireNonce设置为false
我使用Microsoft.Owin.Security.OpenIdConnect 3.0.1来测试此问题。根据我的理解,您需要确保已成功向您的浏览器发布OpenIdConnect.nonce cookie。例如,如果您的Cookie发布到https://localhost:44353/
,而RedirectUri设置为http://localhost:4279
,那么我会遇到类似的问题:
或者您可以尝试将OpenIdConnectProtocolValidator.RequireNonce显式设置为false以禁用检查现时。