首页

文章

微信OAuth2.0授权回调页面域名设置问题怎么解决?

发布网友 发布时间:2022-02-27 04:23

我来回答

3个回答

热心网友 时间:2022-02-27 05:52

当下的解决方案是引入一个新的非常简单的应用来作为微信授权的代理服务,可以这么做:  

1. 把公众号的网页授权接口域名设置成另外一个子域名,如proxy.your.com;    
2. 然后把php_weixin_proxy里面的index.php部署到proxy.your.com

php_weixin_proxy下的index.php是一个很简单的php文件,你可以直接查看源码了解它的实现方式。因为当前项目的环境,我采用php来完成这个代理服务实现,实际上,你完全可以用任意平台语言来完成类似的功能。

当其它业务需要发起微信授权时,将授权请求先发到proxy.your.com,然后proxy.your.com会把这个请求转发到微信;  
当用户同意授权后,proxy.your.com会收到微信的授权回调,并把回调结果(code、state参数)原封不动地再返回给最开始发起授权的业务。

唯一的区别在于,在不使用proxy.your.com的时候,你从应用发起微信授权的链接应该是这样的:  
https://open.weixin.qq.com/connect/qrconnect?appid=xxxxx&redirect_uri=http%3A%2F%2Fpassport.your.com%2F&response_type=code&scope=snsapi_login&state=584bc87e11ff37492#wechat_redirect    
用了proxy.your.com之后,这个授权链接就应该是这样的:    
http://proxy.your.com/?appid=xxxxx&redirect_uri=http%3A%2F%2Fpassport.your.com%2Flogin%2Fnotify&response_type=code&scope=snsapi_base&state=584bc87e11ff37492&device=pc

后面这个链接跟上面的比:  
1. 后面的链接中的host变成了proxy.your.com,也就是代理的授权回调域名;    
2. 后面的多了一个device参数,这个是必要的。因为微信pc端跟移动端的授权地址是不一样的,而后面的链接是发送个proxy.your.com的,所以需要多加个参数告诉它在转发给授权申请给微信的时候,是用PC端还是移动端的授权地址。

1. 用户从我们的应用触发需要授权的操作,比如点击微信登录;    
2. 应用收到这种用户请求后,将用户重定向到微信提供的一个授权页面:    
或    
3. 用户通过微信扫码(PC端授权,上边左图)或者点击确认按钮(移动端授权,上边右图)告知微信,授权应用访问自己的微信账号信息;    
4. 微信收到用户的授权许可后,生成授权码,并把它作为参数回调至应用的某个页面;    
5. 应用的回调页面在接收到微信的回调请求后,拿到其中的授权码,并通过微信官方提供的access token api接口获取access token;    
6. 最后通过access token以及微信官方提供的另一个userinfo api接口就能获取到用户的微信账号信息。

为了实现这个过程,首先要为应用申请一个微信公众号,并将应用最终部署的域名设置到微信公众号设置里面的授权回调页面域名这个选项里面。微信官方对这个选项的说明如下:

关于网页授权回调域名的说明

1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权

3、如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可

由此可见,这个规则极其严格。如果说我们的应用最终部署的时候只有一个域名,那么这种规则不会有什么问题;但是考虑到将来应用的复杂性,我们可能在应用设计之初就会对应用做拆分,然后不同的业务采用不同的二级域名来部署。比如一个带有交易的应用,你可能会把登录注册,交易管理和常规业务都独立出来,然后采用以下的方式来部署它们:  
www.your.com 部署常规业务;    
trade.your.com 部署交易管理的业务;    
passport.your.com 部署登录注册的业务;    
在这种模式下,如果集成微信登录和微信支付,前面说的授权回调页面域名的规则就会给应用带来问题。在这里:至少可以确认trade.your.com和passport.your.com都需要前面的介绍的用户微信授权,但是它们是两个不同的子域名,而且我们只有一个公众号;根据授权回调页面域名的原则,它只能用一个域名,并且只有回调地址的域名与该设置完全相同,才能成功发起微信授权,否则就会提示rediret_uri参数错误或者引发无法回调的问题。

那么这种情况该如何处理?

当下的解决方案是引入一个新的非常简单的应用来作为微信授权的代理服务,可以这么做:  
1. 把公众号的网页授权接口域名设置成另外一个子域名,如proxy.your.com;    
2. 然后把php_weixin_proxy里面的index.php部署到proxy.your.com

php_weixin_proxy下的index.php是一个很简单的php文件,你可以直接查看源码了解它的实现方式。因为当前项目的环境,我采用php来完成这个代理服务实现,实际上,你完全可以用任意平台语言来完成类似的功能。

当其它业务需要发起微信授权时,将授权请求先发到proxy.your.com,然后proxy.your.com会把这个请求转发到微信;  
当用户同意授权后,proxy.your.com会收到微信的授权回调,并把回调结果(code、state参数)原封不动地再返回给最开始发起授权的业务。

唯一的区别在于,在不使用proxy.your.com的时候,你从应用发起微信授权的链接应该是这样的:  
https://open.weixin.qq.com/connect/qrconnect?appid=xxxxx&redirect_uri=http%3A%2F%2Fpassport.your.com%2F&response_type=code&scope=snsapi_login&state=584bc87e11ff37492#wechat_redirect    
用了proxy.your.com之后,这个授权链接就应该是这样的:    
http://proxy.your.com/?appid=xxxxx&redirect_uri=http%3A%2F%2Fpassport.your.com%2Flogin%2Fnotify&response_type=code&scope=snsapi_base&state=584bc87e11ff37492&device=pc

后面这个链接跟上面的比:  
1. 后面的链接中的host变成了proxy.your.com,也就是代理的授权回调域名;    
2. 后面的多了一个device参数,这个是必要的。因为微信pc端跟移动端的授权地址是不一样的,而后面的链接是发送个proxy.your.com的,所以需要多加个参数告诉它在转发给授权申请给微信的时候,是用PC端还是移动端的授权地址。

整体方案思路:

小结:

这个方案我测试过,是行的通的。虽然说引入了代理服务,增加了一次重定向操作,不过由于这个授权请求并不是所有请求都需要,所以实际上也不会对用户体验产生多大的影响,但是从架构上来说,它的好处很明显,能够配合着应用的拆分逻辑,集成同一个公众号的登录及支付功能,不必为每个子应用都单独申请一个公众号来开发了(这种方式从业务上来说也不合理,一个公司哪需要运营那么多公众号)。

热心网友 时间:2022-02-27 07:10

1.部署get-weixin-code.html至你的微信授权回调域名的目录下

2.使用方式类似于直接通过微信回调的方式,只是将回调地址改成了get-weixin-code.html

所在的地址,另外省去了response_type参数(因为它只能为code)以及

#wechat_redirect(它是固定的),它们会在get-weixin-code.html里面自己加上

3.get-weixin-code.html页面从微信那里拿到code之后会重新跳转回redirect_uri里面填写

的url,并且在url后面带上code和state

热心网友 时间:2022-02-27 08:45

参考资料

博客.博客[引用时间2017-12-26]

360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 楼梯的水泥台阶上可以铺地板革吗 手机腾讯会议共享屏幕播放视频没声 腾讯会议共享屏幕没声音怎么办 微信寄快递怎么取消订单_取消订单方法介绍 300兆宽带用什么路由器好? 请问高分子井盖具体材料有那些?谢谢 井盖骨架有哪些材料 ...一个女主是空姐,她和男主第一次在去巴黎飞机上相遇,约定如果三次... 找一部电影 记得结局是主角上了私人飞机,然后和空姐,可能是情人... 360借条怎么开通? 脚踝系红绳是什么意思 痤疮 痘痘 黑头 粉刺必看的终结绿色治疗 女性脸上有痤疮不能吃皮蛋吗 前事不忘,__ 只可意会,___ 皮之不存,__ __,不为瓦全,__ __,不见泰山... 薪酬:以薪酬战略撬动企业变革内容简介 领先型薪酬策略在实践中的应用 领先型薪酬策略什么是领先型薪酬策略 什么是领先型薪酬策略 第三方支付都有什么 银行用车抵押贷款 雌雄眼的女人不能惹雌雄眼的女人旺夫吗 修缮,与修理的区别 小弟想买一款索尼的笔记本。麻烦各位推荐一下。颜色必须是黑色的,键盘... SONY的笔记本电脑硬盘大概多钱一个 先说谢谢了 sony的笔记本ea38ec 到底用的是什么牌子的内存 尔必达?威刚... 在Sony Style上面买机子,除了鼠标,包,其他东西都全么? 有谁知道SONY的最新最小VGN-UX的笔记本好无好用?介绍下基本功能~!_百度... 怎样让孩子主动找老师补课? 表格列求和公式怎么设置 求和函数公式怎么输入 北京注册成立一个公司需要多少钱 北京公司都是什么 手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 微信 回调模式 怎么设置 java怎么获取 微信订阅号怎么设置回调域名 微信公众平台扫码支付回调url设置怎么填 美的空调外机会漏水是什么原因? 请问我家空调外机几处漏水什么情况,而不是底部管子流水? 空调制热外机漏水是什么原因 你好,空调外机下面那个圆孔流水是怎么回事? 京东白条怎么套出来 格力空调外机漏水是什么原因导致的 空调外机漏水什么原因 怎么把微信地址只设置为中国 空调外机接口漏水是什么原因 冬天空调外机漏水是什么原因,怎么解决 美的空调外机下面一直滴水怎么回事? 空调外机底部的孔漏水是怎么回事呢? oppo微信提示音怎么设置 怎么查询微信好友有没有删除自己 删除对方微信,如何知道对方没删除自己 怎样知道微信对方有没有删除自己 抖音这样发1分钟以上视频 关于秋田犬和柴犬的区别,感觉柴犬被黑了 微信支付完成后回调notify_url地址接口要怎么写 java 微信app支付回调url要在微信平台配置吗 带中文域名 微信app 支付回调地址 怎么写 采摘下来的杨梅要怎样放才保鲜久 微信网页授权登陆如何实现回调多个域名 微信开放平台的回调作用域可以修改吗 微信支付回调 php ios微信支付 服务端回调地址怎么接受参数 微信授权登录,登录成功后跳转到指定的地址,能用&带多个参数吗?如果不能,怎么才能增加多个参数呢。 新科空调遥控器如何解锁? 微信网页授权回调地址,怎么和ssh框架结合 新科空调遥控器童锁怎么解锁 新科空调遥控器怎么解锁 新科空调遥控器怎样解锁 新科空调被锁住了,又没有遥控器,怎么办 新科空调遥控器怎么样解锁 新科空调遥控器用了很多个方法都无法解锁怎么办,遥控器上面显示了两个8.8和一把锁 shinco的空调遥控器怎样解锁? 新科空调遥控器锁住了,加减一起按,拆电池,按复位键都试过了,可遥
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com