owin 中间件 katana 如何解密cookie

.NET MVC5 默认的用户登录组件是AspNet.Identity ,支持owin,并且微软自己实现的一套owin 中间件叫 katana

补充一下 katana项目源码地址:https://katanaproject.codeplex.com/

如何用owin做用户登录 授权等这里就不详细说了,大家可以自行搜索。

登录就有用户状态,用户状态一般就是保存在cookie 里,cookie里肯定是保存的加密串了。

那么这个katana是如何解密跟加密呢?

翻了大半天源码,终于找到核心的2个类 CookieAuthenticationMiddleware,CookieAuthenticationHandler

引用一下这篇比较全的文章,

作者最后说下回分解CookieAuthenticationMiddleware这个东西,一直没等到下回,只能自己动手丰衣足食了。

CookieAuthenticationHandler 里面有2个方法

1,AuthenticateCoreAsync

2,ApplyResponseGrantAsync

前者是解密,后者是加密

我们直接看解密的

Unprotect(cookie); 这个方法就是解密的核心方法了

查找引用 找到SecureDataFormat

这里我们可以看到,解密步骤分成了三个步骤

Decode(解码)Unprotect(解除保护)
Deserialize(反序列化)分别查看源码后发现解码用的是 Base64 解保护用的windowsapi 里的CryptoAPI ,序列化用的是二进制序列化。到这里我就停了,需要的知识已经搞清楚了。那么我在项目里怎么解密呢?我没有直接用CookieAuthenticationMiddleware这个类,这个依赖较多,也可能是我没全看懂,反正没直接用。既然知道三个步骤是什么了,干脆我也是3个步骤了。
Decode(解码)用Base64UrlTextEncoder
Deserialize用TicketSerializer这两个类都是public 的,并且直接new 就能用的。katana源码里也是用这两个类。麻烦的地方在
Unprotect需要在Startup里面通过IAppBuilder 来创建 IDataProtector 不要问startup是什么,会用owin的都知道。

用了一个静态变量来装

dataProtector (直觉用静态变量不太好,有其他方案请不吝赐教啊)那么真正实现解密cookie的地方就在某个Controller里

只要传入这个需要解密的cookie就能获取用户信息出来了。

当然这个主要是用来探讨怎么解密 cookie而已,真正你要获取用户信息,直接调用 controller 里User就可以了。

有人会担心,如果知道了解密方式,那岂不是只要cookie信息被截获 别人就能解出里面的信息?

当然不行,我写的这个例子是因为加密 跟解密的方法都在同一台机器上运行,所以所创建的

IDataProtector  其实包含着相同的密钥,相同的appname ,所以才能够加密解密对称。如果分开2台不同的机器就
应该不行了(这个不太确定,如果知道了appname等信息不知道能不能模仿,但是还有winapi CryptoAPI 这个东西,底层实现我没细看,有心的读者可以去研究一下,记得把成果分享给我哟)。

Original: https://www.cnblogs.com/7rhythm/p/4905134.html
Author: 鬼柒
Title: owin 中间件 katana 如何解密cookie

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643453/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Go语言常见的并发模式

    Go语言常见的并发模式 并发不是并行 并发关注的是程序的设计层面,并发的程序也可以顺序执行,在多核CPU上才可能真正同时的运行,并行关注的是程序的运行层面,如GPU中对图像处理都会…

    技术杂谈 2023年7月11日
    066
  • typedef

    为类型定义别名 typedef int Int 这样 Int 就是 int类型的别名,就可以使用 Int来定一整形变量. 只需要在类型变量生命的基础上,再加一个关键字 typede…

    技术杂谈 2023年7月11日
    061
  • Matrix Profile 与 Stumpy (时间序列挖掘,矩阵画像)zz

    Matrix Profile 矩阵画像 (下文中简称为MP) 是由UCR(加州大学河滨分校)提出的一个时间序列的分析算法 —————————————————————————— 目录…

    技术杂谈 2023年5月31日
    085
  • 数据库

    建库操作 #创建数据库(默认字符集编码) create database test20210420 #创建数据库的时候指定字符集编码以及字符校验规则 create database…

    技术杂谈 2023年6月21日
    0103
  • kube-scheduler的调度上下文

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月24日
    082
  • 四大编程原则

    高内聚、低耦合原则: 让一个模块做到独立,做到精益求精,同时把模块间的耦合降到最低,不会因为动了一个模块,而导致其他模块出问题。 高内聚也就是:相似的东西放在一起;而低耦合:不一样…

    技术杂谈 2023年7月25日
    062
  • [学习笔记]Java抽象类

    抽象类 在Java中所有的对象都是通过类来描述的,但不是所有的类都用于描述对象,抽象类就是这样一种存在; 抽象类不能用于实例化对象,但它也可以拥有普通类一样的成员变量、成员方法和构…

    技术杂谈 2023年7月24日
    076
  • 微服务组件–注册中心SpringCloudEureka分析

    Eureka核心功能点 【1】 服务注册(register):Eureka Client会通过发送REST请求的方式向Eureka Server注册自己的服务,提供自身的元数据,比…

    技术杂谈 2023年7月23日
    059
  • 面向对象ooDay6

    ship.paintImage(g);时会去调用paintImage()方法,方法中的this指的就是ship战舰,方法中在判断战舰是否是活着的,若活着则获取战舰的图片,用画笔给画…

    技术杂谈 2023年7月11日
    067
  • 基础篇:java GC 总结,建议收藏

    垃圾标记算法 垃圾回收算法 major gc、minor gc、full gc、mixed gc 又是什么,怎么触发的 垃圾回收器的介绍 Safe Point 和 Safe Reg…

    技术杂谈 2023年7月25日
    078
  • 良好的API接口

    挑战 API是软件系统的核心,而我们在设计API接口的时候会面临着非常多的挑战: 场景上来看,它是多样的,如何设计一个随处适用的API? 我们所参与的业务不断演进的,如何设计一个有…

    技术杂谈 2023年5月31日
    079
  • 交换鼠标按键

    csharp;gutter:true;[DllImport(“user32.dll”)]public extern static bool SwapMouseButton(bool…

    技术杂谈 2023年6月1日
    095
  • 葫芦侠:一键签到云函数 超详细教程

    前言 此代码搬运吾爱破解@fuxi ,而我做这个博客就是记录一些可以使用函数签到的教程,不喜勿喷 教程 1、腾讯云函数地址:https://cloud.tencent.com/lo…

    技术杂谈 2023年6月21日
    0107
  • centos7用rpm安装mysql5.7【初始用yum安装发现下载非常慢,就考虑本地用迅雷下载rpm方式安装】

    1.下载 4个rpm包 mysql-community-client-5.7.26-1.el7.x86_64.rpmmysql-community-common-5.7.26-1….

    技术杂谈 2023年7月24日
    077
  • Vim 练级攻略

    以下的文章翻译自《Learn Vim Progressively》,我认为这是给新手最好的VIM的升级教程了,没有列举全部的命令,仅仅是列举了那些最实用的命令。 很不错。 ————…

    技术杂谈 2023年5月31日
    0100
  • Vue_transition动画

    1 DOCTYPE html> 2 <html lang="en" xmlns:v-on="http://www.w3.org/1999/…

    技术杂谈 2023年7月24日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球