如何在SpringBoot Security中实现OAuth2授权

如何在SpringBoot Security中实现OAuth2授权,第1张

OAuth2已经成为了一个授权的标准协议,大家在很多的产品中都能看到它的身影,比如我们登录一个网站,支持微信,QQ等登录方式,这里QQ和微信提供了授权服务。有很多的授权组件都能提供这种OAuth2认证方式,比如keycloak等,但我们也可以在SpringBoot security中实现OAuth2授权,这篇旁卖亏文章将详细讲解每一个步骤来演示如何在SpringBoot中实现OAuth2授权。

OAuth 2 是一种授权协议,用于通过配雀 HTTP 协议提供对受保护资源的访问。OAuth2 使第三方应用程序能够获得对资源的有限访问。资源的所有者告诉系统,同意授权第三方应用进入系统,获取对这些资源访问。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

由于授权的场景众多,OAuth 2.0 协议定义了获取令牌的四种授权方式,分别是:

四种授权模式分别使用不同的 grant_type 来区分

OAuth 定义了四个角色

访问令牌的职责是在数据过期之前访问数据。

刷新令牌的职责是在现有访问令牌过期时请求新的访问令牌。

要使用 spring security oauth2 模块创建授权服务器,我们需要使用注解@EnableAuthorizationServer 并扩展类 AuthorizationServerConfigurerAdapter。

Spring security oauth 公开了两个用于检查令牌的端点(/oauth/check_token 和 /oauth/token_key),默认它们在 denyAll() 之后受保护。 tokenKeyAccess() 和 checkTokenAccess() 方法打开这些端点以供使用。

ClientDetailsServiceConfigurer 用于定义客户端详细信息,可以基于内存或 JDBC 实现。 为了演示的简单,例子中使用内存实现。 它具有以下重要属性:

clientId –(必需)客户端 ID。

secret(密钥) -(受信任的客户端需要)客户端密钥,如果有的话。

scope – 客户端受限的范围。 如果范围未定义或为空(默认),则客户端不受范围限制。

authorizedGrantTypes – 授权客户端运神使用的授权类型。 默认值为空。

权限 - 授予客户端的权限(常规 Spring Security 权限)。

redirectUris – 将用户代理重定向到客户端的重定向url。 它必须是绝对 URL。

要创建资源服务器组件,需要使用 @EnableResourceServer 注释并扩展 ResourceServerConfigurerAdapter 类。

上面的配置在 /api 开始的所有端点上启用保护。 所有其他端点都可以自由访问。

资源服务器还提供了一种机制来验证用户本身。 在大多数情况下,它将是基于表单的登录。

上面的 WebSecurityConfigurerAdapter 类设置了一个基于表单的登录页面,并使用 permitAll() 打开授权 URL。

为了简化的目的,仅提供了一个简单的获取用户profile的服务,如下:

我们在浏览器中访问 http://localhost:8080/api/users/me ,会跳转到SpringBoot security提供的登录页面,输入用户名jack,密码123456就可以访问该api,但作为第三方应用程序,没有用户名和密码,只能通过OAuth2令牌来访问

如上面的流程图所示,第一步是从 URL 获取资源所有者的授权,如下的url

它将跳转到Springboot security提供的login页面,用户提供用户名和密码,我们的例子中提供用户名jack,密码123456

上一步获取到了授权码,下一步第三方应用程序将使用授权码来获取访问令牌。 可以使用curl命令来获取access token。

authorization中需要使用basic认证,提供用户名clientapp,密码123456,可以使用下面的网站来获取加密后的字符串

授权服务将返回如下的信息,包括access_token,refresh_token和token_type等。

获得访问令牌后,我们可以前往资源服务器获取受保护的API.使用curl命令来访问API,authorization是上一步获取到的access_token。

获取信息如下:

前言:微信扫码登录必须开通微信开放平台,码羡明在其下绑定web网站应用。(同一主体,appId,appSecret,是迟告绑定的web应用属性值,开放平派孝台可见)

参考文档: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=e547653f995d8f402704d5cb2945177dc8aa4e7e&lang=zh_CN

获取access_token时序图

application.properties添加相关配置信息

授权url参数说明

springboot微信小程序退出登录。

向下拉显示出小程袭岩橘序界面,找到你想要退出登录的小程序图标,长按图标,微信界面底部会枣宴出现一个红色的区域显拍团示拖动到此处删除字样,就可以退出了。


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

原文地址: https://outofmemory.cn/yw/8271133.html

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

发表评论

登录后才能评论

评论列表(0条)

保存