JavaJVM · Java虚拟机原理 · JVM上语言·框架· 生态系统Java入门基础

网络中的Auth身份认证和授权

2020-05-19  本文已影响0人  liaowenhao

1. 认证和授权

首先,需要对齐概念:
认证:authentication(AuthN),身份认证
授权:authorization(AuthZ),权限授权
例子:
你要登陆论坛,输入用户名张三,密码1234,密码正确,证明你张三确实是张三,这就是 authentication;
检查用户张三是个版主,所以有权限加精和删别人帖,这就是 authorization。

2. 认证场景

3. 认证流程

OAuth 2 是一个授权框架,或称授权标准,它可以使第三方应用程序或客户端获得对HTTP服务上(例如 Google,GitHub )用户帐户信息的有限访问权限。
OAuth 2 通过将用户身份验证委派给托管用户帐户的服务以及授权客户端访问用户帐户进行工作。综上,OAuth 2 可以为 Web 应用 和桌面应用以及移动应用提供授权流程。

角色
认证流程

在用户交互层面,可看下图


认证交互流程.png

在请求时序上,可看下图


请求时序图png

Authrization Request
客户端向用户请求对资源服务器的authorization grant。
Authorization Grant(Get)
如果用户授权该次请求,客户端将收到一个authorization grant。
Authorization Grant(Post)
客户端向授权服务器发送它自己的客户端身份标识和上一步中的authorization grant,请求访问令牌。
Access Token(Get)
如果客户端身份被认证,并且authorization grant也被验证通过,授权服务器将为客户端派发access token。授权阶段至此全部结束。
Access Token(Post && Validate)
客户端向资源服务器发送access token用于验证并请求资源信息。
Protected Resource(Get)
如果access token验证通过,资源服务器将向客户端返回资源信息。

认证方式

授权许可类型取决于应用请求授权的方式和授权方服务支持的 Grant Type。OAuth 2 定义了四种 Grant Type,每一种都有适用的应用场景。

授权码flow比隐式flow更加安全:

4. Jwt

JSON Web Token的缩写。JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。可指导将用户授权等数据通过加密的方式存储在Cookie等容器中。

iss: 该JWT的签发者
sub: 该JWT所面向的用户
aud: 接收该JWT的一方
exp(expires): 什么时候过期,这里是一个Unix时间戳
iat(issued at): 在什么时候签发的

Signature 签名:用于对JWT的头部和负载整合的一个签名验证

5. Cookie & Session

Cookie
Cookie翻译过来是‘ 小甜饼’,Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,实际上Cookie是服务器在本地机器上存储的一小段文本,并随着每次请求发送到服务器。也是实现Session的一种方式。

Session
是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中
服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器可以是cookie,但是当我们完全禁掉浏览器的cookie的时候,也可以放在url参数中

区别

6. 参考

https://medium.com/@darutk/diagrams-and-movies-of-all-the-oauth-2-0-flows-194f3c3ade85
https://www.zybuluo.com/wddpct/note/1130423
https://juejin.im/post/5aa783b76fb9a028d663d70a
https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

上一篇 下一篇

猜你喜欢

热点阅读