OAuth协议中说到的AccessToken可以是以下两种:

1.任意只起到标识作用的字符串:这种情况下Resource Server处理请求时需要去找Authorization Server获取用户信息。

2.携带用户基本信息的加密字符串:这种情况下Resource Server处理请求时只需解析AccessToken,直接获取到用户信息即可。

JWT就是用来生成第二种access token的一种协议。具体介绍:JWT

具体来说,一个JWT token就是如下一串字符串:

这个字符串由3部分(Header, Payload, Signature)组成,用"."分隔。

Header

这一部分时用来定义构造JWT的参数信息,用一个JSON对象表示如下:

{
"alg": "HS256",//定义JWT中的Signature所用的算法
"typ": "JWT"//表示Token的类型,此处统一写成JWT
}

将上述JSON对象的字符串形式进行Base64Url编码之后就得到了token中的header部分。

Payload

这一部分是存储业务信息的地方。信息也以JSON对象的方式表示:

{
"iss": "Jensen",//签发人
"exp": "1308726283"//token过期时间戳
}

对象中的key其实可以为任意字符串。但是为了让token字符串尽可能小。key尽量统一为3各字符。然后为了将一些常用的key标准化,JWT定义了如下标准key:

iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号

详见 RFC7519

当然我们也可以定义自己的key,比如:name:姓名,admin:是否为admin...

将上述JSON对象的字符串形式进行Base64Url编码之后就得到了token中的payload部分。

Signature

将header和payload部分的base64字符串用特定的密钥进行hash得到签名部分。比如我们选用HMAC SHA256作为签名算法,则签名过程如下:

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

secret只有服务器端才知道,通过签名可以防止token被修改。

与OAuth验证结合

采用这种方式生成的access token, Resouce Server处理请求的时候(access token可以放在Authorization Header中,比如:Bearer xxxx)可以直接解析。但是这里有
两个问题:
1. Authorization Server和Resource Server如何共享签名的secret?
最简单的方法就是Resource Server和Authorization Server使用统一的secret。但是这样的话如果有很多Resource Server(比如不同的资源提供者)共用一个Authorization
Server的话可能就有安全问题,这种情况下就需要针对不同的resource server使用不同的secret进行签名了。同时client在申请token的时候也需要告知要访问那个resource server。 2. Token的失效问题
因为Token是在Resource Server直接解析,意味着一旦签发,在其到期前一直有效。用户logout后也没办法将已经产生的token设置为无效。
要解决这个问题,还是需要Resource Server将access token提交至Authorization Server验证。Authorization Server可以将access token进行缓存或者
缓存采用相关算法为其生成的key(比如用签名作为key),验证时只需验证key是否存在即可。(当然,我们我进行失效处理时可以把缓存的key删掉即可)

Web验证方式(4)--JWT的更多相关文章

  1. Web验证方式(3)--OAuth 2.0协议

    介绍 OAuth协议是用来解决第三方应用程序访问Http Service的时候的认证问题.举个例子:某视频网站支持用户通过微信登陆,然后获取用户在微信上的图像信息. 在这个场景里 微信充当的就是Htt ...

  2. Web验证方式(2)--Form Authentication

    Form验证方式并不是HTTP标准,而是在微软ASP.NET Web框架下提供的一种验证方式.其大致流程如下: 在上图的流程中,ASP.NET框架提供了如下支持类:( FormsAuthenticat ...

  3. Web验证方式(1)--Http Basic Authentication

    Http Basic Authentication是HTTP协议中定义的Web系统中的验证方式.参考wiki 主要的实现机制如下: 1. 用户通过浏览器匿名访问web资源. 2. web服务器检测到w ...

  4. Web.xml中四种验证方式

    源地址:https://blog.csdn.net/imimi_/article/details/78805642 <security-constraint> 的子元素 <http- ...

  5. 两系统用asp.net forms 身份验证方式实现跨域登录信息共享

    1.两个系统的 web.config 都配置为 forms 验证方式( system.web —> authentication 节点) 2.在两个系统的Web.config里配置相同的 sys ...

  6. Asp.net Mvc4 基于Authorize实现的模块权限验证方式

    在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...

  7. Webservice加上SoapHeader验证方式

    提供一种基于SoapHeader的自定义验证方式,代码如下: public class MySoapHeader : System.Web.Services.Protocols.SoapHeader ...

  8. IIS下的身份验证方式管理

    设置.查看身份验证方式 #导航到某站点下: cd IIS:\Sites\DemoSite\DemoApp #启用站点test01下的Windows身份验证 Set-WebConfigurationPr ...

  9. asp.net中常用的几种身份验证方式

    转载:http://www.cnblogs.com/dinglang/archive/2012/06/03/2532664.html   前言 在B/S系统开发中,经常需要使用"身份验证&q ...

随机推荐

  1. KALI视频学习31-35

    (三十一)Kali漏洞利用之SET Social Enginnering Toolkit(SET)是一个开源.Python驱动的社会工程学渗透测试工具,提供了非常丰富的攻击向量库.是开源的社会工程学套 ...

  2. 20145221 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)

    20145221 <Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDEA) 实验要求 使用JDK编译.运行简单的Java程序: 使用IDEA 编辑.编译.运行.调 ...

  3. arm-linux-ld命令

    我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系:再者,我们最后生成的bin文件是 ...

  4. 简单方法实现无刷新提交Form表单

    前几天遇到一个前端的问题.我希望提交表单后页面不跳转且不刷新当前页面,然而查了很多方法都没有解决. 由于Form 是提交后一定刷新页面的,所以我们可以用一个折中的办法.我们给Form 指定一个ifra ...

  5. linux下查看cpu核心数

    1.查看物理CPU个数 cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2.查看每个物理CPU含有的core个数 cat ...

  6. 关于AutoResetEvent 和ManualResetEvent

    在公司的代码里面看到这两个类的使用了,第一次去msdn上的时候,看的一头雾水(关键是没有找对方法) http://www.cnblogs.com/qingyun163/archive/2013/01/ ...

  7. Angular4笔记——表单状态相关的属性

    表单状态字段(FromControl)touched和untouched用来判断用户是否访问过一个字段(也就是这个字段是否获取过焦点,如果获取过焦点,touched是true,untouched是fa ...

  8. thinkphp5的auth权限认证(转自thinkphp官方文档+自己总结)

    thinkphp5的auth权限认证(转自thinkphp官方文档+自己总结) 一.总结 一句话总结:相当于就是用其它thinkphp的扩展一样,都是引入扩展,配置扩展,然后使用 引入 配置 使用 基 ...

  9. office-word

    目录(大纲) word中大纲的视图(也就是目录)是根据1/2/3级大纲决定的 格式刷 可以刷成一样的格式,字体,编号以及大纲等等. 主要用于编号和目录,快捷键(ctrl+shift) 编号设置(不建议 ...

  10. angular的中文文档在这里。。

    链接 仿ant-design的  angular组件 echarts文档