10-微信OAuth2授权登录

网友投稿 655 2022-10-07

10-微信OAuth2授权登录

10-微信OAuth2授权登录

本文DEMO:wechat 分支。

环境准备

内网穿透

打开后只需要填写域名,不要带协议头。例如回调是​​ * 用来从{@link HttpServletRequest}中检索封装成OAuth2请求对象{@link OAuth2AuthorizationRequest} * * @param clientRegistrationRepository the client registration repository * @return DefaultOAuth2AuthorizationRequestResolver */ private OAuth2AuthorizationRequestResolver oAuth2AuthorizationRequestResolver(ClientRegistrationRepository clientRegistrationRepository) { DefaultOAuth2AuthorizationRequestResolver resolver = new DefaultOAuth2AuthorizationRequestResolver(clientRegistrationRepository, OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI); // 设置自定义解析 resolver.setAuthorizationRequestCustomizer(new WechatOAuth2AuthorizationRequestCustomizer(WECHAT_PROVIDER)::customize); return resolver; }

获取token踩坑

还有一个小坑,Spring Security token响应对象​​OAuth2AccessTokenResponse​​​中的​​OAuth2AccessToken​​​对象要求必须有类型属性​​TokenType​​​(​​Access Token Types​​​)。​​OAuth2AccessTokenResponseHttpMessageConverter​​​的​​DefaultMapOAuth2AccessTokenResponseConverter​​​负责​​OAuth2AccessTokenResponse​​​的组装,我们可以改造一下,最终自定义的​​OAuth2AccessTokenResponseClient​​就可以满足需求了。

Security提供的代理有一些兼容问题,我重写了该代理,具体的代码参考本文对应的DEMO。

配置

上面的自定义逻辑需要在​​HttpSecurity.oauth2Login​​中配置才能生效,以下代码配置了授权端点、token端点、用户信息端点的自定义配置。

/*** * 自定义相关的配置。 * * @param * @return SecurityFilterChain * @throws Exception exception */ @Bean SecurityFilterChain customSecurityFilterChain(HttpSecurity ClientRegistrationRepository clientRegistrationRepository) throws Exception { OAuth2UserService oAuth2UserService = new DelegatingOAuth2UserService<>(Collections.singletonMap(WECHAT_PROVIDER,new WechatOAuth2UserService())); OAuth2AuthorizationRequestResolver authorizationRequestResolver = oAuth2AuthorizationRequestResolver(clientRegistrationRepository); -> requests.anyRequest().authenticated()) .oauth2Login().authorizationEndpoint() // 授权端点配置 .authorizationRequestResolver(authorizationRequestResolver) .and() // 获取token端点配置 比如根据code 获取 token .tokenEndpoint().accessTokenResponseClient(accessTokenResponseClient()) .and() // 获取用户信息端点配置 根据accessToken获取用户基本信息 .userInfoEndpoint().userService(oAuth2UserService); return }

这些配置项是如何配置生效的呢?下一篇我们接着来深入研究。

测试

http://<内网穿透域名>/oauth2/authorization/wechat

就可以看到结果了,多调试几遍,熟悉熟悉流程。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何解决微信小程序遇到修改数据后页面不渲染的问题(微信小程序修改数据库信息页面)
下一篇:微信小程序的MINA文件结构的介绍(简单描述下微信小程序的相关文件类型)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~