-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Network - 鉴权 #28
Comments
3. OAuth 2.0OAuth 2.0 是一种授权机制,主要用来颁发token。RFC标准解释了OAuth如下:OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。 最佳实践
申请tokenOAuth 2.0 规定了四种获得令牌的流程。开发者可以选择最适合自己的那一种,向第三方应用颁发令牌。下面假设B是资源所有者,A是客户端。 授权码模式特点:最常用,安全性最高。它适用于那些有后端的 Web 应用,授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。 流程:
隐藏式特点:把令牌直接传给前端,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间(session)有效,浏览器关掉,令牌就失效了。 流程:
密码式特点:允许用户把用户名和密码,直接告诉该应用,应用直接用来申请令牌。 流程:
凭证式特点:适用于没有前端的命令行应用,即在命令行下请求令牌。这种方式给出的令牌,是针对第三方应用的,而不是针对用户的,即有可能多个用户共享同一个令牌。 流程:
|
4. SSO单点登录单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 最佳实践
CAS框架实现的SSO流程示意图如下。 首次登录app的流程为:
首次登录app2的流程如下:
特点与OAuth2.0相比,两者的差异在于:
|
接口鉴权方式
1. SESSION
登录之后为请求方提供一个session id,对应的登录信息由服务端存储,客户端以cookie的形式保存session id,并在随后的请求中都带上session id。服务器会为每个session设置有效期,失效之后会将session删除。
Java端可以调用
session.invalidate()
方法主动让session失效。更多用法参考知乎博客。2. JWT TOKEN
JWT,全称Json Web Token。与session不同,JWT方案是让客户端保存会话数据,每次请求都发回服务器。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。
token格式
token由服务器生成,发放给客户端。
token = (Header).(Payload).(Signature)
Header和Payload的完整格式参考阮一峰的博客。Signature是对两者的签名,防止数据篡改。签名使用的密钥仅有服务器知道,签名公式如下:
HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
最佳实践
Authorization
字段。The text was updated successfully, but these errors were encountered: