背景
先来说说我为什么要了解这个,之前对登录相关系统一窍不通,经历过xxxxxx项目,算是明白了一点相关名词和概念,
单点登录:是一种身份验证服务,允许用户使用一组凭据(例如用户名和密码)登录并访问多个相关但独立的软件系统。在使用SSO的情况下,用户只需一次登录,即可无需重复输入凭据就能访问各个不同的系统。
单点注销:单点注销也是SSO的重要概念,指的是用户在任何一个系统中注销后,所有其他相关系统也将自动注销该用户,以确保用户的安全退出。
…
然后单点登录,通常用于内部系统之间,其中还要求用户体系必须是一套,那如果内外系统交互,用户系统还不一样呢,这样就涉及到Ouath2.0协议了。
OAuth2.0介绍
1.1 简介
OAuth 2.0是一种授权框架,用于在客户端与服务器之间安全地共享资源。它允许用户授权第三方应用程序访问他们在另一个服务上存储的私人资源,例如个人信息、照片或文档,而无需将用户名和密码直接提供给第三方应用程序。
OAuth 2.0官方图
角色区分
- 客户端(Client):通常指用户
- 资源拥有者(Resource Owner):用户想要访问的网站
- 认证服务器(Authorization Server):三方
- 资源服务器(Resource Server):
Q&A
Q:为什么我们需要先拿授权码,再去换token,为什么不直接一步到位拿到token?
A:安全吧,对于用户来说,直接返回给他token,一方面他不关心,另外以防止有心之人拿到token去做一些坏事。
Q:如果防止CRSF攻击?
A:
- 授权码是一次性使用的,基本都会立马被本身应用去处理掉,因此很难重复利用授权码去换取token。能够有效减少攻击
- 授权的回调地址通常是配置需要配置在授权服务器中,一次会进行要求验证来源站点,一定程度上防范 CSRF 攻击。
- 随机State参数
Q:为什么有了AccessToken,还需要RefreshToken?
A:(个人理解)
- AccessToken可以设置短一点,RefreshToken可以可以设置长一点,这样可以防止AccessToken被盗用,不会长时间异常
- 增加用户体验,可以无伤续token
- 实时性会强一点,比如每次续token,都可以拿到最新用户数据