微信官方你真的懂OAuth2?Spring Security OAuth2整合企业微信扫码登录

网友投稿 1624 2022-10-23

微信官方你真的懂OAuth2?Spring Security OAuth2整合企业微信扫码登录

微信官方你真的懂OAuth2?Spring Security OAuth2整合企业微信扫码登录

正当我兴致勃勃打开文档学习的时候,脸上笑容逐渐消失,这确定是OAuth的吗?

而且这个​​access_token​​接口,你还不能频繁调用,要缓存起来公用。

那费了半天劲儿去拿​​code​​有啥用呢?

居然这个​​code​​是拿用户信息的,不得不说,我服了!这也就算了,命名上能不能走点心,一会儿下划线,一会儿驼峰:

{ "errcode": 0, "errmsg": "ok", "OpenId":"OPENID", "DeviceId":"DEVICEID", "external_userid":"EXTERNAL_USERID"}

这个JSON风格,果然是大厂,讲究人,一个JSON要三个人来写才体面

!反序列化的时候我还得给你写一个兼容,这是要拉满我的KPI是吧?算了,忍忍吧,老板就要这个功能,它就是一坨翔,做开发的也得含泪吃下去,干

环境准备

准备一个内网穿透

-> 127.0.0.1:8082

​​invybj.natappfree.cc​​​会映射到我本地的​​8082​​端口,也就是我本地要开发应用的端口。

创建应用

图里的参数​​AgentId​​​和​​Secret​​要记下来备用。

配置内网穿透域名

在创建应用这一页往下拉到页面底端,你会看到:

这里配置你授权登录应用生产的正式域名或者上面内网穿透的域名,注意只配置域名,而且不能使用​​localhost​​。

其实我感觉改写​​hosts​​文件也能用啊,你可以试一试。

到这里环境就搞定了,接下来就开始写Spring Security兼容代码吧。

写起来太恶心了,不过对比文档和OAuth2的流程之后其实也没那么麻烦。我先放出我调试好的配置:

这里的​​work-wechat-scan​​​是客户端的​​registrationId​​

我们期望的是保持Spring Security OAuth2的风格,当我访问:

RequestEntity>

把这个配置到​​DefaultAuthorizationCodeTokenResponseClient​​就行了。

​​access_token​​的缓存,我放在了下一步进行解决。

适配获取用户信息

​​code​​​和​​access_token​​​都拿到了,最后一步获取用户的信息。这里是比较麻烦的因为获取​​access_token​​​后并没有直接提供将​​code​​​传递给​​OAuth2UserService​​​的方法。最后发现​​OAuth2AccessTokenResponse​​​的​​additionalParameters​​​属性可以传递到​​OAuth2UserService​​​,于是就利用代理模式改造了​​OAuth2AccessTokenResponseClient​​来实现:

@Datapublic class WorkWechatOAuth2User implements OAuth2User { private Set authorities; private Integer errcode; private String errmsg; @JsonAlias("OpenId") private String openId; @JsonAlias("UserId") private String userId;}

收尾

拿到用户信息后,就结束了,你实现一个​​AuthenticationSuccessHandler​​来保证登录凭证和你平台一致,无论是cookie还是JWT,最后把它配置到这里:

.successHandler(AuthenticationSuccessHandler successHandler)

试一下效果

务必使用域名进行访问,不要使用​​localhost​​或者IP。

访问​​http://invybj.natappfree.cc/login​​,这里是内网穿透域名,出现:

总结

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

上一篇:[DP记忆化 字符串] UVa1630 Folding
下一篇:J2SE for Android (Swing for Android)- 在 Android 上运行 J2SE 应用程序
相关文章

 发表评论

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