gpt4 book ai didi

WIF 安全 token 缓存

转载 作者:行者123 更新时间:2023-12-04 01:04:27 26 4
gpt4 key购买 nike

我有一个站点是我们基于 WIF 的自定义 STS 的依赖方。我们最近实现了一个安全 token 缓存,如下所述:Azure/web-farm ready SecurityTokenCache .我们的实现与该链接中描述的实现之间的主要区别在于,我们使用 Azure AppFabric 缓存作为持久缓存的后备存储,而不是表存储。这有助于缓解我们在某些浏览器上的 token 截断问题,但也引入了一个新问题(我们看到截断问题主要出现在除 fedauth cookie 之外还具有谷歌分析 + 防伪 cookie 的页面上)。我们现在每天收到数千次以下异常:

System.IdentityModel.Tokens.SecurityTokenException
ID4243: Could not create a SecurityToken. A token was not found in the token cache and no cookie was found in the context.

System.IdentityModel.Tokens.SecurityTokenException: ID4243: Could not create a SecurityToken. A token was not found in the token cache and no cookie was found in the context.
at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver)
at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte[] token, SecurityTokenResolver tokenResolver)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte[] sessionCookie)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken)
at Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

此异常似乎发生在重定向循环中,因此我们将在 1-2 分钟内看到数百个异常。

在研究异常时,我一直无法找到任何有用的信息。到目前为止,唯一有希望的金块是有人提到它可能与缓存对象在 session 之前到期有关。

我们一直无法在内部重现该问题,只能知道它存在,因为我们的 Elmah 表中有数千个条目。任何帮助或见解将不胜感激。

我们推出了我们认为可能有助于解决问题的内容(下面的代码),但没有任何效果:
HttpContext.Current.Response.Cookies.Remove("FedAuth");
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
string signoutUrl = (WSFederationAuthenticationModule.GetFederationPassiveSignOutUrl(authModule.Issuer, authModule.Realm, null));
Response.Redirect(signoutUrl);

最佳答案

我有一个 MVC 单页应用程序作为依赖方,使用 WSO2 4.5 作为 IDP 并收到相同的错误 - “System.IdentityModel.Tokens.SecurityTokenException
ID4243:无法创建 SecurityToken。 token 缓存中未找到 token ,上下文中未找到 cookie。 ......”进行了搜索,发现了 Thinktecture 名人布洛克·艾伦 (Brock Allen) 的以下陈述。

This exception is thrown when the browser is sending a cookie that contains the user’s claims but something about the processing can’t be performed (either the key has changed so the token can’t be validated or if using a server side cache and the cache is empty). An end user isn’t going to be able to do much about this and they’re going to continue to get the error since the browser will keep sending the cookie.



全文: http://brockallen.com/2012/10/22/dealing-with-session-token-exceptions-with-wif-in-asp-net/

在同一篇文章中,他提供了以下代码片段,解决了我的问题。在 Global.asax 中:
void Application_OnError()
{
var ex = Context.Error;
if (ex is SecurityTokenException)
{
Context.ClearError();
if (FederatedAuthentication.SessionAuthenticationModule != null)
{
FederatedAuthentication.SessionAuthenticationModule.SignOut();
}
Response.Redirect("~/");
}
}

关于WIF 安全 token 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793900/

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