本文主要对 SpringSecurity Oauth 2.0
用户认证,授权码授权模式、密码授权模式,以及授权流程进行讲解
1. 用户认证方式
1.1 用户认证
开发中,有些功能只有管理员才有,普通用户是没有的。即需要对用户的身份进行认证,是管理员还是普通用户。认证方式有两种:
-
身份认证:
- 用户在访问相应资源时对用户的身份信息进行验证,身份合法才可以继续访问。
- 常见用户认证方式:用户密码登录,指纹打卡。简单来说就是校验用户账号密码是否正确。
-
用户授权:
- 用户认证通过后,系统会判断用户是否拥有访问资源的权限,只允许访问有权限的资源系统,没有权限的无法访问,这个过程叫用户授权(鉴定角色)。
因而用户认证(登录)成功后还需要鉴权,判断用户是否有权限访问相应资源。
1.2 单点登录认证
- 单点登录(Single Sign On),简称 SSO 。
- 用户在访问每个微服务时,都需要验证身份信息,如果每一个微服务都登录一次就太麻烦了。因而用户在一个微服务系统中登录后,不用登录也可以访问其他微服务,这个功能就叫单点登录 。
- 简单来说就是用户只需要登录一个微服务系统就可以免登录访问其他微服务系统。
1.3 第三方账号登录认证
很多项目中,我们都可以使用第三方QQ、微信等平台账号登录,用户通过一个账号就可以登录很多平台,十分便利。
1.4 第三方认证原理
当需要访问第三方系统的资源时,首先需要通过第三方的认证(比如:微信认证),由第三方系统对用户认证。若认证通过则允许访问相应资源。
如下图,当用户在访问抢单页面时,需要先通过微信登录进行身份认证,认证通过才允许抢单。
2. 认证技术解决方案
2.1 单点登录解决方案
分布式系统要实现单点登录,通常将认证系统独立抽取出来作为用户登录和授权使用,并且将用户身份信息存储在单独的存储介质,比如:MySQL、Redis,出于对性能的考虑通常放在Redis中。
如下图,我们将畅购认证系统作为单点登录用户认证系统,用户通过该系统登录,系统会返回一个token给用户,同时存储一份到Redis中,用户每次访问其他微服务都会携带token,微服务会调用畅购认证服务验证token权限,畅购认证服务通过查询Redis中有没有改token完成认证,若认证通过则允许用户访问。
Java中还有很多用户认证的框架都可以实现单点登录:
- Apache Shiro
- CAS
- Spring security CAS
- Oauth2(可以实现单点登录 和 第三方认证)
单点登录特点:
- 认证系统为独立的系统。
- 各个子系统通过HTTP或其他协议与认证系统通信,完成用户认证。
- 用户身份信息存储在Redis集群中。
2.2 Oauth 2 认证
- Oauth(开放授权)是一个开放标准,即不管是否受信任的服务都可以访问。
- 允许用户授权第三方移动应用访问它们存储在另外的服务器上的信息,并且不需要提供账号密码就可以获取。也就是用户不需要在当前系统中用系统账号登录,当前系统就可以获取用户的微信账号信息(头像、用户名等)。
2.3 Oauth 2 认证原理
授权码模式授权:
- 用户通过第三方账号登录当前系统,用户授权允许当前系统使用第三方账号登录当前系统,
- 第三方账号平台会创建一个授权码返回给当前系统,当前系统通过授权码去第三方账号平台申请token,
- 用户每次访问的时候相应页面的时候,系统会携带令牌到第三方服务中认证用户令牌,认证通过才允许访问。
密码授权模式和授权码原理差不多,只不过需要账号密码登录。
2.4 微服务环境Oauth 2 实现
3. 公钥私钥
每个用户都有一个公钥和私钥:文章来源:https://www.toymoban.com/news/detail-400787.html
- 公钥加密
- 私钥解密
用户可以将自己的公钥给别人(私钥不会给别人),别人通过公钥加密信息,传给自己,自己通过私钥解密。保证数据的安全性。文章来源地址https://www.toymoban.com/news/detail-400787.html
到了这里,关于【Oauth2.0 单点登录 + 第三方授权认证】用户认证、授权模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!