OpenIdConnectProtocolValidator - 随机数错误

pro*_*eus 3 c# asp.net-mvc azure nonce openid-connect

我在我的 azure 网站(azure Active Directory、C#、MVC)上使用 OpenIdConnect 身份验证,并且随机收到此错误

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

我正在使用 KentorOwinCookieSaver,据我所知,它是这个问题的解决方案,但显然我错了,因为它不断发生。我怎样才能阻止这个?

在ConfigureAuth方法中我有这一行

app.UseKentorOwinCookieSaver();
Run Code Online (Sandbox Code Playgroud)

Bru*_*hen 5

根据您的描述,我按照本教程并使用此代码示例来检查此问题。身份验证中间件的初始化如下所示:

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);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

使用fiddler捕获日志记录时的网络痕迹,您可以发现 OpenIdConnect.nonce cookie 在 OpenID Connect 中间件开始身份验证请求之前会发送到浏览器,如下所示:

在此输入图像描述

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

在此输入图像描述

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

我使用Microsoft.Owin.Security.OpenIdConnect 3.0.1来测试这个问题。根据我的理解,您需要确保您的 OpenIdConnect.nonce cookie 已成功发送到您的浏览器。例如,如果您的 cookie 发出到https://localhost:44353/,而 RedirectUri 设置为http://localhost:4279,那么我会遇到类似的问题:

在此输入图像描述

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