spring security oauth2 授权登录改造

如何改造为spring security oauth2授权码方式登录授权

当前登录流程中不需要用户密码,使用的是公司内部app扫码授权

看网上大部分流程都需要输入用户密码进行授权,这里不同的是用了公司app扫码授权 重定向 url中带有code, 前端使用此 授权code 请求服务端获取accessToken 拿到用户信息。

###当前整体流程如下 (授权服务器都有) 请问如何将如下流程改造为spring security oauth2登录授权 (扫码方式)

img

从流程来看实现如下:

首先由前端发起请求,跳转到授权服务器的授权页面。
接着授权服务器生成二维码,公司 app 扫码后重定向至指定 URL,并带有授权码 code。
再回到前端解析 URL 中的 code,并使用它向服务端发起请求。
接着服务端根据 code、client_id、grant_type、client_secret 等信息,向授权服务器请求 access_token。
授权服务器根据请求信息,返回 access_token。
服务端使用 access_token 和 client_id 请求授权服务器获取用户信息。
授权服务器返回用户信息。
服务端使用用户信息登录成功,并设置 session。
后台返回首页给前端。

首先,您需要创建一个OAuth2授权服务器,使用Spring Security OAuth2来实现。接下来,在资源服务器上配置Spring Security OAuth2来验证令牌。具体来说,您需要进行以下步骤:

定义一个AuthorizationServerConfigurerAdapter类并重写其configure(ClientDetailsServiceConfigurer)方法,在其中定义客户端信息。

定义一个WebSecurityConfigurerAdapter类并重写其configure(HttpSecurity)方法,在其中定义授权服务器的安全策略。

在授权码回调URL上使用AuthorizationCodeAccessTokenProvider类从授权服务器获取令牌。

在资源服务器上使用OAuth2AuthenticationProcessingFilter类验证令牌。

在授权服务器和资源服务器上都配置OAuth2AccessTokenSupport来支持令牌访问。

希望以上步骤能帮助您实现您的需求。

改造Oauth2授权码登录流程
1、用户进入网站的登录页面,点击微信的图标以微信账号登录系统,用户是自己在微信里信息的资源拥有者
2、资源拥有者同意给客户端授权
资源拥有者扫描二维码表示资源拥有者同意给客户端授权,微信会对资源拥有者的身份进行验证,验证通过后,微信会询问用户是否给授权网站访问自己的微信数据,用户点击“确认登录”表示同意授权,微信认证服务器会颁发一个授权码,并重定向到网站。
3、客户端获取到授权码,请求认证服务器申请令牌
此过程用户看不到,客户端应用程序请求认证服务器,请求携带授权码。
4、认证服务器向客户端响应令牌
认证服务器验证了客户端请求的授权码,如果合法则给客户端颁发令牌,令牌是客户端访问资源的通行证。此交互过程用户看不到,当客户端拿到令牌后,用户在网站看到已经登录成功。
5、客户端请求资源服务器的资源
客户端携带令牌访问资源服务器的资源。网站携带令牌请求访问微信服务器获取用户的基本信息。
6、资源服务器返回受保护资源
资源服务器校验令牌的合法性,如果合法则向用户响应资源信息内容。
【注意:资源服务器和认证服务器可以是一个服务也可以分开的服务,如果是分开的服务资源服务器通常要请求认证服务器来校验令牌的合法性。】