gpt4 book ai didi

.net - 回收工作进程后从 session cookie 中读取的 ClaimsIdentity 类型不正确

转载 作者:行者123 更新时间:2023-12-01 15:37:01 25 4
gpt4 key购买 nike

在 VS 2012/.NET 4.5/ASP.NET MVC 4 应用程序中,我有一个从 ClaimsIdentity 派生的自定义身份类型。它只是向基类添加了一些只读属性,以便于从一些声明中读取值:

public class AppIdentity : ClaimsIdentity
{
public AppIdentity(IEnumerable<Claim> claims) : base(claims, "Custom")

public string CustomProp { get { return FindFirst("CustomClaim").Value; } }
// etc.
}

在自定义 ClaimsAuthenticationManager 中,我将传入的主体转换为包装上述身份的主体,为该主体创建 token 并将 token 写入 cookie:

var claims = new List<Claim>
{
new Claim("CustomClaim", "CustomValue"),
// etc.
};
var newPrincipal = new ClaimsPrincipal(new AppIdentity(claims));
var sessionToken = new SessionToken(newPrincipal, TimeSpan,FromHours(24));
FederatedAuthentication.SessionAuthenticationModule
.WriteSessionTokenToCookie(sessionToken);

如果我像这样在 Controller 操作中获取后续请求的标识...

var identity = ClaimsPrincipal.Current.Identity;

...我发现有时 identity 的运行时类型是 AppIdentity,有时它只是它的基类型 ClaimsIdentity。我的自定义声明始终存在于 identityClaims 集合中。

当工作进程被回收时,标识似乎“丢失”了我期望的 AppIdentity 类型。我目前只在这个项目中使用 IIS Express 开发服务器,例如,当我在 web.config 中做一个小的更改时,我可以强制执行此行为。之后,身份始终具有 ClaimsIdentity 类型,而不再是 AppIdentity

问题:这种在 cookie 中保存自定义声明身份类型的方法是否错误并且可能不受支持? session cookie 是否存储派生的 ClaimsIdentity 的类型信息(我想这对于从 cookie 中具体化正确的身份类型是必要的)?

最佳答案

类型标识在序列化往返过程中丢失。我在这里写道: http://leastprivilege.com/2012/10/08/custom-claims-principals-in-net-4-5/

关于.net - 回收工作进程后从 session cookie 中读取的 ClaimsIdentity 类型不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16025035/

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