oauth2.0与JWT实现单点登录

Posted BeginAction

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oauth2.0与JWT实现单点登录相关的知识,希望对你有一定的参考价值。

统一认证中心源码:https://gitee.com/itbac/springsecurityoauth2demo


最近接到产品的一个需求,做一个客户端H5,希望可以登录A系统,然后跳转访问B系统的接口,用户不需要再输入账号密码。就是一个单点登录的需求。后期,产品希望把A系统做出一个开放平台,模仿微信开放平台,给开发者颁发一个appId,然后让他们都可以使用公司的所有产品。


这个打通两个系统的对接任务,就落在了我的身上。我是瑟瑟发抖啊。还要搞开放平台,我想原地爆炸。


于是,周末我就研究了这些技术。


首先,SpringSecurity是Spring家族的安全框架,一般会拿来跟 Apache的Shiro做对比。大家都说,Shiro是一个轻量级安全框架,SpringSecurity 是一个重量级框架,因为他配置复杂,相对于Shiro 的配置。当然,也更加的功能强大。一般做技术选型,都会在这2个之中选一个。


再说JWT,JSON Web Token 是一个开放的行业标准(RFC 7519),它定义了一种简洁的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使用HMAC算法或者RSA的公钥私钥对来签名,防止被篡改。


JWT令牌的优点:

  1. 基于json,方便解析。

  2. 可以在令牌中自定义内容,易于扩展。

  3. 通过非对称加密算法及数字签名技术,防止篡改,安全性高。

  4. 资源服务使用JWT可以不依赖认证服务即可完成授权。

缺点:

  1. 令牌较长,占存储空间比较大。


JWT组成:

一个JWT实际上就是一个字符串,它由头部、载荷、签名三部分组成。


为了实现我上面说的需求,A ,B 两套系统打通,必须使用相同的token生成与解析的方案,于是,我想到了使用JWT 。


说到开放平台,让我想到了 Oauth2.0协议 。


OAuth (Open Authorization 开放授权),是一个开放的授权标准,允许用户让第三方应用访问该用户在某一个web服务商存储的私密资源,而无需将用户密码提供给第三方应用。


例如:我使用微信登录了百度网站。详细的流程是:资源拥有者(我)点击使用微信登录,百度向微信开放平台申请一个授权码,我扫码同意了授权。百度使用授权码去获取到一个微信的token令牌。百度通过令牌,向微信获取了我的微信账号信息。百度使用我的微信账号,注册了一个百度账号。


如此,就完成了第三方登录。


同理,结合到了我的需求场景,A系统要做一个开放平台,必须要具备类似微信开放平台的一些能力。比如:

  1. 给开发者应用生成AppId 和 Secret

  2. 发放授权码 ,发放token令牌 。


开发者应用拿到token令牌以后,就可以访问资源服务器,例如现在的B系统。B系统为了能识别这个token ,就必须使用和A系统一样的token生成与解析策略。


如此,就实现了单点登录。


我是Bac , 分析一些 Java的知识,大家一起学习。

















以上是关于oauth2.0与JWT实现单点登录的主要内容,如果未能解决你的问题,请参考以下文章

Oauth2.0实现单点登录的原理流程,通俗易懂!

OAuth2.0 原理流程及其单点登录和权限控制

OAuth2.0 原理流程及其单点登录和权限控制

Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程

Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程

Spring Cloud云架构 - SSO单点登录之OAuth2.0登录流程