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
的额外声明。
在 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
的额外声明。