OAuth2.0 简介

OAuth2.0 简介,第1张

1、OAuth产生背景
很多网站、APP 没有搭建自己的账号体系,而是直接微信,QQ,微博的这种授权方式登录。
如果需要用户名密码登录网址,app 需要明文保存用户的微博账号和密码,这样很不安全。
一旦网站、APP,被攻击就会导致用户密码泄漏,以及所有使用微信,QQ,微博登录的网站的数据泄漏。
为了解决以上的问题,OAuth 协议应运而生。

2、定义
Oauth是一个授权机制,目的让一个第三方的应用获取到一个>在原先dubbo+zookeeper项目中,web模块只暴露Restful接口,各服务模块只暴露duboo接口,此时用户登录后由web项目进行token的鉴权和验证,并通过dubbo的隐式传参将sessionID传递给dubbo服务模块, 拦截器再根据sessionID从Redis中获取用户信息设置到当前线程

然鹅,在springcloud中,各个微服务直接暴露的是restful接口,此时如何让各个微服务获取到当前用户信息呢?最佳的方式就是token了,token作为BS之间的会话标识(一般是原生随机token),同时也可以作为信息的载体传递一些自定义信息(jwt, 即Json web token)。

为了能更清楚的了解本文,需要对spring-security-oauth 及 jwt有一定了解,本文只关注用户信息传递这一块

认证服务器配置 AuthorizationServerConfigurerAdapter

自定义token转换器
CustomJwtAccessTokenConverter

此时按照固定格式访问授权服务器token接口获取token,如图,可以获取到jwt格式的token,并且额外信息nick_name也已经添加

直接解析jwt字符串可以获取到以下信息,即用户名和授权信息

只需要指定和授权服务器一模一样的token store 和token converter
在securiy的过滤器中 OAuth2AuthenticationProcessingFilter 会从token中获取相关信息进行鉴权
源码:

注意,资源服务器主要配置在
ResourceServerConfigurerAdapter

微服务获取jwttoken中的用户信息,两种方式,使用security上下文可以直接获取当前用户名和权限,另一种自定义拦截器获取额外信息。
这个就简单了,获取header头解析验证token
然后获取之前从授权服务器中的添加的 nick_name的额外信息放入线程变量

其中用户上下文类

启动拦截器注册webmvc配置类

在controller中获取用户信息如图

在默认的认证异常如图

假设我们做了全局异常处理,前端希望在token过期时做统一的登录跳转如何做?
实现 AuthenticationEntryPoint 接口重写 commence 方法即可
注意,直接抛出异常并不会走 @RestControllerAdvice , 因为在这里是response直接返回,并没有使用到Controller处理

此时返回我自定义的Response对象,如图

这还是一个标题党。

OAuth2 现在已经是开放授权协议的事实标准,你可以看到几乎所有的 xxx 开放平台均采取的 OAuth2 协议来进行授权。而在 Authorization Code 模式的基础上结合 JWT ,标准化的 userinfo endpoint 和服务发现,就成了 OpenID-Connect。当然即便不加上这些限定,OAuth2 在 Authorization Code 模式下,也通常被用作统一身份认证的解决方案提供给用户。而由于 OAuth2 与 CAS 不同,缺乏 Apereo CAS 这样的重量级产品来对标(话说回来,Apereo CAS 现在自己就支持 OAuth2 来着)。于是市场上的 OAuth2 实现可谓群魔乱舞,槽点一时难以穷尽。

个人建议,在选取 OAuth2 产品时,务必通过 oauth playground 进行测试,以验证协议实现的标准性,避免将来踩坑。而如果需要自己临时起一个 OAuth2 服务做测试的话嘛~~~

是的,搭一个 OAuth 服务器 5 分钟就够了。

是的,Apereo CAS 现在也支持 OAuth2 协议了,所以如果你已经按照 15 分钟部署一个 CAS 服务并对接 Shibboleth-IdP 346 的路程部署好了 CAS 服务的话,那么只需要略微的调整,就可以让他支持 OAuth2 了,5 分钟足矣。

下文假定已经安装好了 shibboleth-idp-346 和 cas 61 ,并使用 >项目地址: >OAuth2已经成为了一个授权的标准协议,大家在很多的产品中都能看到它的身影,比如我们登录一个网站,支持微信,QQ等登录方式,这里QQ和微信提供了授权服务。有很多的授权组件都能提供这种OAuth2认证方式,比如keycloak等,但我们也可以在SpringBoot security中实现OAuth2授权,这篇文章将详细讲解每一个步骤来演示如何在SpringBoot中实现OAuth2授权。

OAuth 2 是一种授权协议,用于通过 >

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zz/12833310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存