OpenIdConnectProtocolValidator - nonce错误

时间:2018-01-04 11:26:32

标签: c# asp.net-mvc azure openid-connect nonce

我在我的azure网站上使用OpenIdConnect身份验证(azure active directory,c#,MVC),我随机收到此错误

IDX10311:requireNonce为true(默认值),但validationContext.Nonce为null。 nonce无法验证。如果您不需要检查现时,请将OpenIdConnectProtocolValidator.RequireNonce设置为false

我正在使用KentorOwinCookieSaver,据我所知,这是解决这个问题的方法,但显然我错了,因为它一直在发生。我怎么能阻止这个?

在ConfigureAuth方法中,我有这一行

app.UseKentorOwinCookieSaver();

1 个答案:

答案 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,如下所示:

enter image description here

用户输入凭据并同意权限后,authorization_codeid_tokenstate将发布到您指定的 RedirectUri ,然后进行一些验证执行并生成新cookie并删除以前的OpenIdConnect.nonce cookie,如下所示:

enter image description here

  

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,那么我会遇到类似的问题:

enter image description here

或者您可以尝试将OpenIdConnectProtocolValidator.RequireNonce显式设置为false以禁用检查现时。