c# – ContextSessionSecurityToken在第二个用户登录时被覆盖

我有一个问题发生在一个非常头痛的单一生产环境中.

您有两个用户A和B.用户A登录,一切正常.用户B登录,用户B登录后,用户A现在具有与用户B相同的安全令牌.

我们的WIF设置是相当标准的,我们在令牌上注入一些自定义声明,但是除了创建和存储令牌(WIF处理)之外,其他一切都看起来是标准的.

感觉像我可能会遇到一些奇怪的边缘案例与WIF,我不熟悉

更新:A和B都可以在单独的机器上,也可以在同一台机器上的单独的浏览器上.

我们在请求服务时获取令牌的位置

if (HttpContext.Current == null)
    return null;

if (HttpContext.Current.Cache == null)
    return null;

if (FederatedAuthentication.SessionAuthenticationModule == null)
    return null;

if (FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken == null)
    return null;

var sessionToken = FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken;
if (sessionToken.ClaimsPrincipal == null)
    throw new InvalidOperationException("The ClaimsPrincipal property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities == null)
    throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities.Count == 0)
    throw new InvalidOperationException("The ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object has no identities");
if (sessionToken.ClaimsPrincipal.Identities[0] == null)
    throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object is null");
if (sessionToken.ClaimsPrincipal.Identities[0].Claims == null)
    throw new InvalidOperationException("The first identity in the ClaimsPrincipal.Identities sub-property of the FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken object as a null Claims property");

return TokenUtility.GetDelegatedToken(IssuedTokenTypes.UserProfile | IssuedTokenTypes.AccountPermissions,sessionToken);

如果我在这里添加日志记录,我可以看到sessionToken.ClaimsPrincipal.Identity.Name与此应该是这个名称不同.

解决方法

您的依赖方和STS(WIF)服务器是否托管在同一IIS上,使用相同的应用程序池?如果是,那么尝试使用不同的应用程序池作为工作进程有时用来弄乱事情.希望这将有助于您.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...