“就在这山顶之上,”老太婆道,“在这炎山山顶有一个天然湖泊,名为玄寒天池。这山中溪流里的溪水,便是从那天池流下来的。只是,管理玄天上道境的真武元帅已在这山中布下无数禁制,但是无妨,你只要按我的吩咐去做,这些禁制便能一一避过。此外,在天池附近还有四只神兽分镇在周围,守在南面的是玄天灵龟,我可教你骗过它,这样,你便可以进入天池。”

【译】Asp.Net Identity Cookies 格式化


原文出处
Trailmax Tech
Max Vasilyev: ASP.Net MVC development in Aberdeen, Scotland

中英对照版

我的读者联系到我,并向我提出了一系列关于 AspNet Identity的问题。一开始我觉得这些问题都会比较简单,我能够轻松的回答他,但结果表明,这里面的每一个问题都值得写一篇单独的文章。所以我会写一个Mini系列关于Identity框架的“Q-A(问与答)”博客。

第一个问题是关于Cookie安全Token以及它是如何被计算(computed)出来的:如果同一个用户在 Chrome 和Firefox中登陆,那么Identity Framework 在Cookie中创建token,token包含相同的信息(用户Id、 Security Stamp、等等),但是为甚么这两个Cookie是不同的?

我思考了一下,我猜 cookie创建信息和过期信息被编码在了cookie中,可能还有cookie的某种签名信息也被一同保存了。我觉得我猜的很接近答案。

幸运的是,处理cookie的代码就在开源的 Katana Project 中。

下面就是用户登录是cookie的创建过程

  1. Identity framework根据你数据库中的信息创建ClaimsPrincipal对象(它对应于 ApplicationUser类)
  2. Identity向principal中添加一些列默认claim,例如ApplicationUser.Id和SecurityStamp
  3. ClaimsPrincipal被传递到CookieAuthenticationHandler这个OWIN中间件中
  4. Authentication Handler对不同的东西都做了很多检查,比如,检查每个cookie是否应该被标记为secure或者persistent,设置过期时间等等很多事情。这一系列检查(checks,含有操作的意思)的结果就是生成一个AuthenticationTicket,这个AuthenticationTicket拥有一个含有一系列claim和AuthenticationProperties(认证属性)的ClaimsIdentity,AuthenticationProperties是一个包含很多数据的字典(dictionary),里面的数据可能是 cookie issue 日期,过期日期,是否持久保存cookie,等等
  5. 认证票据和claims principal接下来被传递到SecureDataFormat类中,数据将在这个类中序列化、加密、Base64编码

最后一步包含很多动作,我们再深入些。

认证票据由TicketSerializer进行序列化。这里ClaimsIdentity被写入内存流:包含一些属性和一个claim列表。然后AuthenticationProperties(包括cookie 设置,过期日期)也被写入了内存流。然后内存流被GZip压缩,以备接下来的处理。

管道中的下一步就是加密。加密操作由 .Net 类库中的DpapiDataProtector提供。你可以在MSDN上阅读相关文档。我不确定加密的强度。文档中说目标参数事实上是一个密码列表。现在我在OWIN中看到了一个地方你可以在这里设置你自己的加密密码,而且我看到这里主密码是“Microsoft.Owin.Security.IDataProtector”。所以我的猜测是安全的信息不应该被放进cookie里,比如:别把连接字符串放在claim里!(注:这里的翻译可能不准确,建议此段参考阅读原文)

Next step in the pipeline is encryption. Encryption is borrowed from .Net class DpapiDataProtector. You can read documentation on MSDN. I’m not sure about the strength of the encryption. The documentation says that purpose parameters are effectively a list of passwords. And now here I’ve seen in OWIN where you can set your own encryption password and I can see that the main password is set to “Microsoft.Owin.Security.IDataProtector”. So my guess would be that no secure information should go into cookie, i.e. don’t put your connection strings into user claims!

在加密之后,字节流使用Base64编码以易于网络传输。最后准备好以等待被设置到Http响应的cookie头上。

所有的过程如下图所示

反正,原来的问题:“为什么在不同浏览器中的cookies是不同的?”的答案是:因为签名中包含cookie的创建信息和过期时间,这在不同浏览器中是不同的,所以cookie中的加密信息也是不同的,所以cookie也是不同的。

当前文章:http://hnhdqp.com/ask/question_81908.html

发布时间:2019-02-20 11:08:01

安卓德州约局 电脑纸牌游戏被隐藏 海贼王黄金城 帮别人打游戏赚钱 吉祥集团潘荣强 崇阳画圈脚下载 所有赢话费捕鱼的游戏 棋牌看牌器app 联众斗地主单机版4399 街头充话费骗局

编辑:董成华辛

相关新闻

TIOBE 9月编程语言排行榜:C语言重返榜首

2019-02-20 01:49:02

梅州星俗偎教育咨询有限公司

全民枪战手动刷钻石效率翻倍攻略 快速买新枪

2019-02-20 04:26:16

四川扑郴科贸有限公司

机构不惜涨停卖出次新股

2019-02-20 02:13:10

漯河缸偾涝汽车服务有限公司

基金网入44只持股市值3054亿元

2019-02-20 03:26:30

吉安写缎网络科技

热门推荐

  • [UFC] 김지연, 내년 1월 저스틴 키시와 플라이급 경기
  • 《GTA Online》里的兽迷们
  • 断奶后怎么丰胸?详解快速有效的丰胸技巧
  • 海思板卡SATA最佳读写块大小测试
  • 世界卫生组织宣布:游戏成瘾将被列入精神疾病
  • 美国研发新型无人机:完成任务就将逐渐消失
  • 四川女子公招复试被拒录:自考法律专业不属法学类
  • 河北警方劝返一外逃经济嫌犯 涉骗取国家退税款4.5亿
  • 四川茂县幸存三口之家转院成都 母亲泣不成声
  • 女子拒绝男子和洽要求 泼汽油将其烧伤
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:微信共存版ios地址 星力捕鱼平台
  • 马瑞纳游艇官网 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 欢乐麻将作弊器 一花德州扑克5.0.0版本 游戏直播怎么挣钱 大型手机棋牌平台