探索flutter框架开发的app在移动应用市场的潜力与挑战
1714
2022-10-23
微信官方你真的懂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
收尾
拿到用户信息后,就结束了,你实现一个AuthenticationSuccessHandler来保证登录凭证和你平台一致,无论是cookie还是JWT,最后把它配置到这里:
.successHandler(AuthenticationSuccessHandler successHandler)
试一下效果
务必使用域名进行访问,不要使用localhost或者IP。
访问http://invybj.natappfree.cc/login,这里是内网穿透域名,出现:
总结
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~