我正在运行一个 ASP.NET MVC (4.7.2) Web 应用程序。我使用具有混合流的 Identity Server 4 实例进行外部身份验证。
在测试 Firefox 的新“缺少 SameSite 默认为 LAX”功能时,他没有将 LAX OpenIdConnect.Nonce cookie 发送回我的 MVC Web 应用程序:
图 1:所有 cookie 都有 Lax
图 2:在 POST 时未向signin-oidc提供 cookie
我得到错误:
OpenIdConnectProtocolValidationContext.Nonce 为空,OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce 不为空。无法验证随机数。如果您不需要检查 nonce,请将 OpenIdConnectProtocolValidator.RequireNonce 设置为“false”。请注意,如果找到“nonce”,它将被评估。
我尝试了一些方法来确保所有 cookie 至少具有 None 或 Unspecified 设置,但是这个 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 设置为 None 或 Unspecified。
提前谢谢了!