JWT是一种认证协议
        JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。

OAuth2是一种授权框架
        另一方面,OAuth2是一种授权框架,提供了一套详细的授权机制(指导)。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源

JWT是一种安全标准。基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息的合法性;如果验证成功,会产生并返回一个Token(令牌),用户可以使用这个token访问服务器上受保护的资源。

token的例子:[所有部分都 base64 URL-safe进行编码处理]

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

一个token包含三部分:

header.claims.signature

Header头部分---------->头部分简单声明了类型(JWT)以及产生签名所使用的算法。 

{  "alg" : "AES256",  "typ" : "JWT"}

Claims声明------------>声明部分是整个token的核心,表示要发送的用户详细信息。有些情况下,我们很可能要在一个服务器上实现认证,然后访问另一台服务器上的资源;或者,通过单独的接口来生成token,token被保存在应用程序客户端(比如浏览器)使用。

{  "sub": "1234567890",  "name": "John Doe",  "admin": true}
Signature签名------------------>签名的目的是为了保证上边两部分信息不被篡改。如果尝试使用Bas64对解码后的token进行修改,签名信息就会失效。一般使用一个私钥(private key)通过特定算法对Header和Claims进行混淆产生签名信息,所以只有原始的token才能于签名信息匹配。
        这里有一个重要的实现细节。只有获取了私钥的应用程序(比如服务器端应用)才能完全认证token包含声明信息的合法性。所以,永远不要把私钥信息放在客户端(比如浏览器)



==============================

OAuth2

OAuth2不是一个标准协议,而是一个安全的授权框架。它详细描述了系统中不同角色、用户、服务前端应用(比如API),以及客户端(比如网站或移动App)之间怎么实现相互认证。

Roles角色
应用程序或者用户都可以是下边的任何一种角色:

    • 资源拥有者

    • 资源服务器

    • 客户端应用

    • 认证服务器

Client Types客户端类型
这里的客户端主要指API的使用者。它可以是的类型:

    • 私有的

    • 公开的

Client Profile客户端描述
OAuth2框架也指定了集中客户端描述,用来表示应用程序的类型:

    • Web应用

    • 用户代理

    • 原声应用

Authorization Grants认证授权
认证授权代表资源拥有者授权给客户端应用程序的一组权限,可以是下边几种形式:

    • 授权码

    • 隐式授权

    • 资源拥有者密码证书

    • 客户端证书

    • Endpoints终端

OAuth2框架需要下边几种终端:

  • 认证终端

  • Token终端

  • 重定向终端

最新文章

  1. C#操作Mongodb
  2. paper 132:图像去噪算法:NL-Means和BM3D
  3. Alpha阶段冲刺总结
  4. android首次点击没反应,第二次才反应
  5. 【转】DataSource高级应用
  6. Oracle Study Note : Tablespace and Data Files
  7. SpinLock 自旋锁, CAS操作(Compare & Set) ABA Problem
  8. 重装系统后QQ聊天记录恢复方法
  9. crontab command not found
  10. bzoj1898
  11. 去除 Visual Studio 中臃肿的 ipch 和 sdf 文件
  12. 整理部分JS 控件 WEB前端常用的做成Jsp项目,方便今后直接用
  13. BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)
  14. Windows 8实例教程系列 - 理解应用框架
  15. Android--扫描二维码
  16. hdu 1212 Big Number(大数取模)
  17. Linux使用ssh公钥实现免批量分发管理服务器
  18. MySQL 基础知识梳理学习(四)----GTID
  19. hive建表范例
  20. linux位数查看

热门文章

  1. 13 — springboot集成mybatis-plus — 更新完毕
  2. Navicat连接Linux系统下的Mysql数据库
  3. day15 内置函数和模块
  4. Leetcode中的SQL题目练习(一)
  5. js正则表达式之密码强度验证
  6. Linux学习 - 流程控制
  7. Linux学习 - ACL权限
  8. OpenStack之五: image镜像服务(端口9292)
  9. go goroutines 使用小结
  10. SSM和springboot对比