OWIN 身份角色在本地工作,但当我 publish/run 远程 IIS 服务器上的相同代码时似乎消失了

OWIN identity roles work locally, but seem to disappear when I publish/run the same code on a remote IIS server

在 MVC 站点中使用 OWIN AuthenticationHandler,我按如下方式登录用户:

var claims = new List<Claim> { new Claim(ClaimTypes.Role, UIRoles.PowerUser) };
var identity = session.ToClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie, claims);
Context.Authentication.SignIn(identity);

稍后,我检查用户是 PowerUser:

User.Identity.HasRole(UIRoles.PowerUser)

这适用于我的本地 IIS,但一旦我将其发布到远程 IIS 机器上,当我尝试检查用户是否为 PowerUser 时,它总是 returns False .为什么会这样?我是否遗漏了一些东西,比如说,IIS 服务器的配置或远程机器的 web.config?

我找到了原因。这有点傻。当我想更新用户的会话时,我正在重新发布 cookie,问题是我正在更新这些 cookie 的 SessionInfo 对象被另一个没有任何额外声明的 SessionInfo 对象替换:

session.ToClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);

这是为我从原始 cookie 中删除 UIRoles.PowerUser 的额外声明。