gpt4 book ai didi

c# - 如何避免 'SamlAssertion.NotOnOrAfter condition is not satisfied' 错误

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:47 25 4
gpt4 key购买 nike

最近我开始在现有的 Web 应用程序上使用基于声明的身份验证。因为该应用程序使用了 jQuery 以及更值得注意的 AJAX 函数,所以我不得不更改处理程序,使其不再尝试重定向 XmlHTTPRequests,而是返回一个更易于处理的 403 状态。

这是 FederatedAuthentication.WSFederationAuthenticationModule.AuthorizationFailed 事件处理程序:

    protected void WSFederationAuthenticationModule_AuthorizationFailed(object sender, AuthorizationFailedEventArgs e)
{
//WSFederationAuthenticationModule sam = (WSFederationAuthenticationModule)sender;

HttpContext context = HttpContext.Current;
HttpRequest req = context.Request;
HttpResponse resp = context.Response;

if (req == null || resp == null) return;

if ((resp.StatusCode == 302 || resp.StatusCode == 401) && req.Headers["X-Requested-With"] == "XMLHttpRequest")
{
resp.StatusCode = 403;
e.RedirectToIdentityProvider = false;
}

}

我有以下实现 AJAX 调用和处理响应的模式:

$.ajax({
cache: false,
data: $.param(o),
dataType: "xml",
url: "AJAXCall.ashx",
success: function (data)
{
// Success handler
},
error: function (XMLHttpRequest, textStatus, responseText)
{
if (XMLHttpRequest.status == 403)
{
var retVal = window.showModalDialog("Session.aspx", "", "dialogHeight: 250px; dialogWidth: 250px; edge: Raised; center: Yes; resizable: Yes; status: Yes;");
if (retVal)
{
// Succesful session renewal handler
}
else
{
// Session renewal failure handler
}
}
else
{
// Other errors handler
}
}
});

如果“Session.aspx”成功重定向到身份提供者并返回,它基本上会关闭模式对话框并返回值为 true。

但我的问题是出现以下错误:

"ID4223: The SamlSecurityToken is rejected because the SamlAssertion.NotOnOrAfter condition is not satisfied."

这是在模拟当前应用程序用户的子系统上调用的,显然前一个 session 的 token 仍然存在。我在应用程序的 web.config 中有以下设置:

<federatedAuthentication>
<wsFederation passiveRedirectEnabled="true" persistentCookiesOnPassiveRedirects="true" issuer="https://adfs.example.com/adfs/ls/" realm="https://www.example.com:449/" requireHttps="true" />
<cookieHandler requireSsl="true" />

如何避免这个错误?任何帮助将不胜感激。

最佳答案

以下 FederatedAuthentication.WSFederationAuthenticationModule.SignInError 事件处理程序方法解决了问题:

    protected void WSFederationAuthenticationModule_SignInError(object sender, ErrorEventArgs e)
{
// handle an intermittent error that most often occurs if you are redirected to the STS after a session expired,
// and the user clicks back on the browser - second error very uncommon but this should fix
if (e.Exception.Message.StartsWith("ID4148") ||
e.Exception.Message.StartsWith("ID4243") ||
e.Exception.Message.StartsWith("ID4223"))
{
FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();
e.Cancel = true;
}
}

它将删除持续存在的 session token Cookie,即使在 session 过期后用户已被重定向到 STS 服务。

关于c# - 如何避免 'SamlAssertion.NotOnOrAfter condition is not satisfied' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com