如何在.NET 4.7.2上为OWIN OpenIdConnect.Nonce cookie将SameSite值设置为None或未定义

时间:2020-01-31 11:08:52

标签: asp.net cookies owin identityserver4 samesite

我正在运行ASP.NET MVC(4.7.2)Web应用程序。我使用带有混合流的Identity Server 4实例从外部进行身份验证。

在测试Firefox的新“缺少SameSite默认为LAX的功能”时,他没有将LAX OpenIdConnect.Nonce cookie发送回我的MVC Web应用程序:

图片1:所有cookie都松懈

All cookies have Lax

图片2:开机自检(POST)没有提供Cookie到 signin-oidc

Missing nonce cookie in the callback from Identity Server

我得到了错误:

OpenIdConnectProtocolValidationContext.Nonce为空, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce不为null。的 随机数无法验证。如果您不需要检查随机数,请设置 OpenIdConnectProtocolValidator.RequireNonce为“ false”。注意是否 找到“ nonce”,它将被评估。

我尝试了一些措施,以确保所有cookie至少具有“无”或“未指定”设置,但是此OpenIdConnect.Nonce cookie始终停留在LAX。

app.UseKentorOwinCookieSaver();

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Cookies",
    CookieSameSite = SameSiteMode.None,
    CookieManager = new SameSiteCookieManager(new SystemWebCookieManager())
});

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    Authority = configDetails.IdentityProviderUrl,
    AuthenticationType = "Cookies",
    ClientId = configDetails.ClientId,
    Scope = configDetails.Scope,
    ResponseType = "id_token code",
    RedirectUri = !string.IsNullOrWhiteSpace(configDetails.RedirectUri) ? configDetails.RedirectUri : "~/",
    SignInAsAuthenticationType = "Cookies",
    UseTokenLifetime = false,
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        AuthorizationCodeReceived = AuthorizationCodeReceived,
        RedirectToIdentityProvider = n =>
        {
            if (n.ProtocolMessage.RequestType != Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectRequestType.Logout) return Task.FromResult(0);

            var idTokenHint = n.OwinContext.Authentication.User.FindFirst("id_token");
            if (idTokenHint != null)
            {
                n.ProtocolMessage.IdTokenHint = idTokenHint.Value;
            }
            return Task.FromResult(0);
        }
    },
    CookieManager = new SameSiteCookieManager(new SystemWebCookieManager()),
});

在我的web.config中,我添加了:

<system.web>
  <httpCookies sameSite="None" requireSSL="true" />
</system.web>

我正在使用Microsoft MSDN中的SameSiteCookieManager。

我希望有人可以帮助我将此OpenIdConnect.Nonce cookie设置为“无”或“未指定”。

非常感谢!

2 个答案:

答案 0 :(得分:0)

我对IdSvr4和asp.net 4.7.2使用相同的设置来更改sameSite Cookie。我的似乎正在工作。我使用了似乎可以解决问题的cookie管理器。我没有做system.web httpCookie元素。查看此处查看我对此发表的内容是否有帮助。

SO post on framework 4.7.2 and sameSite

答案 1 :(得分:0)

我已通过连接到RedirectToIdentityProvider并从那里手动设置来解决SameSite问题。像这样:

inputs: A 3D tensor with shape [batch, timesteps, feature].