在Asp.Net Web应用程序中使用Okta时,OpenIdConnectProtocolValidationContext.Nonce为null
我有一个.NETASP.NETWebApplication,我正在尝试使用Okta实现单点登录功能。除了使用Google Chrome 80+登录外,我所有的代码都可以正常工作和运行。当我登录Okta并被调回我的应用程序时,我得到以下错误。以下是我迄今为止尝试过的步骤。这适用于所有其他浏览器,但失败的原因很可能是Chrome 80s SameSite cookie属性的更改 “/”应用程序中出现服务器错误。 IDX21323:要求是“[PII被隐藏]”。 OpenIdConnectProtocolValidationContext.Nonce为null, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce不为null。这个 无法验证nonce。如果不需要检查nonce,请设置 OpenIdConnectProtocolValidator.requireOnce为“false”。注意如果 如果找到“nonce”,将对其进行评估。描述:一个未处理的 执行当前web请求期间发生异常。 请查看堆栈跟踪以了解有关错误和错误的更多信息 它起源于代码的地方 异常详细信息: Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolInvalidNonceException: IDX21323:要求是“[PII被隐藏]”。 OpenIdConnectProtocolValidationContext.Nonce为null, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce不为null。这个 无法验证nonce。如果不需要检查nonce,请设置 OpenIdConnectProtocolValidator.requireOnce为“false”。注意如果 如果找到“nonce”,将对其进行评估 源错误: 在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常 堆栈跟踪: [OpenIDConnectProtocolInValidNoceException:IDX21323:请求已被删除 “[PII是隐藏的]”。OpenIdConnectProtocolValidationContext.Nonce是 null,未指定OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce null。无法验证nonce。如果不需要检查 现在,将OpenIdConnectProtocolValidator.Requirence设置为“false”。 注意:如果找到“nonce”,将对其进行评估。]在Asp.Net Web应用程序中使用Okta时,OpenIdConnectProtocolValidationContext.Nonce为null,.net,single-sign-on,owin,okta,samesite,.net,Single Sign On,Owin,Okta,Samesite,我有一个.NETASP.NETWebApplication,我正在尝试使用Okta实现单点登录功能。除了使用Google Chrome 80+登录外,我所有的代码都可以正常工作和运行。当我登录Okta并被调回我的应用程序时,我得到以下错误。以下是我迄今为止尝试过的步骤。这适用于所有其他浏览器,但失败的原因很可能是Chrome 80s SameSite cookie属性的更改 “/”应用程序中出现服务器错误。 IDX21323:要求是“[PII被隐藏]”。 OpenIdConnectProtoco
Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator.ValidateNonce(OpenIdConnectProtocolValidationContext 验证上下文)+1374
Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator.ValidateAuthenticationResponse(OpenIdConnectProtocolValidationContext validationContext)+219
Microsoft.Owin.Security.OpenIdConnect.d_u11.MoveNext() +3770 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()+27
Startup.cs
Configure()代码
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(新的CookieAuthenticationOptions()
{
CookieSameSite=SameSiteMode.None,
CookieSecure=CookieSecureOption。始终,
CookieHttpOnly=true,
CookieManager=新代码.SameSiteCookieManager(新的Microsoft.Owin.Host.SystemWeb.SystemWebCookieManager())
});
app.UseOktaMvc(新的OktaMvcOptions()
{
OktaDomain=ConfigurationManager.AppSettings[“okta:OktaDomain”],
ClientId=ConfigurationManager.AppSettings[“okta:ClientId”],
ClientSecret=ConfigurationManager.AppSettings[“okta:ClientSecret”],
RedirectUri=ConfigurationManager.AppSettings[“okta:RedirectUri”],
PostLogoutRedirectUri=ConfigurationManager.AppSettings[“okta:PostLogoutRedirectUri”],
AuthorizationServerId=string.Empty,
Scope=新列表{“openid”、“profile”、“email”},
});
Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator dd=新的Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator();
dd.RequireNonce=false;
//初始化ADM工具包并开始日志记录。
Code.KitHelper.Init();
检查您是否仅在Chrome中遇到此问题。如果是这样的话,这将是因为在版本80中启动了新的安全实现
如果启用,没有SameSite限制的Cookie也必须是安全的。如果没有SameSite限制的cookie设置为没有安全属性,则将拒绝该cookie。此标志仅在同时启用“SameSite by default cookies”时有效Mac、Windows、Linux、Chrome操作系统、Android
但是,您可以在中禁用此功能chrome://flags 但它现在默认启用
#没有相同站点的cookie必须是安全的
一旦将chrome设置为disabled(禁用),您就必须重新启动chrome。这解决了我的问题,并解释了为什么在生产环境中,每件事情都按预期工作,但在本地,我遇到了暂时错误。我想补充一点,您可以检查项目或环境中是否存在配置(如负载平衡器)这就是通过http而不是https进行通信
相关线程:我也遇到了这个问题,也是突然出现的。自从认证码在6个月前上线以来,我就没有碰过它。奇怪的是,它只影响我本地,一旦部署,它就可以按预期工作。@Brandonm您是将.Net版本升级到4.7.2还是只需将CookieSecure选项设置为Always?是的,事实上我也迁移到了4.7.2,并将关联的OpenIdConnect nuget软件包升级到支持的最新版本。我的所有Cookie身份验证选项都设置为默认值。感谢Brandon,我认为你是对的,我认为我的问题是没有交付nonce Cookie,因为它没有明确设置为安全,这就是chrome 80崩溃的原因。我能够禁用您之前提到的设置,它
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
CookieSameSite = SameSiteMode.None,
CookieSecure = CookieSecureOption.Always,
CookieHttpOnly = true,
CookieManager = new Code.SameSiteCookieManager(new Microsoft.Owin.Host.SystemWeb.SystemWebCookieManager())
});
app.UseOktaMvc(new OktaMvcOptions()
{
OktaDomain = ConfigurationManager.AppSettings["okta:OktaDomain"],
ClientId = ConfigurationManager.AppSettings["okta:ClientId"],
ClientSecret = ConfigurationManager.AppSettings["okta:ClientSecret"],
RedirectUri = ConfigurationManager.AppSettings["okta:RedirectUri"],
PostLogoutRedirectUri = ConfigurationManager.AppSettings["okta:PostLogoutRedirectUri"],
AuthorizationServerId = string.Empty,
Scope = new List<string> { "openid", "profile", "email" },
});
Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator dd = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator();
dd.RequireNonce = false;
//Init ADM Kit and start logging.
Code.KitHelper.Init();