“请在微信客户端打开链接”的实现原理?

下面的url摘自微信文档

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com&response_type=code&scope=snsapi_base&state=123#wechat_redirect 

请问,微信后台是怎么根据这样一段url判断浏览器是否是微信浏览器呢?
理论上客户端可以伪造任何http请求啊
难道http请求中包含了微信客户端软件的证明?

阅读 11k
5 个回答

最简单的方案就是利用 http request header 里的 User-Agent,它是端的一个标识,微信的 ua 里包含 MicroMessenger 这么一个字符串,可以用正则做匹配

其次,确实可以伪造,但是这里的提示更重要的是提示那些正常的用户,你的链接应该在微信内打开才能正常使用,如果你是伪造的,后续的流程因为不是在微信内所以也无法走通,也没有任何影响

实际是后台判断的是浏览器的UA 是不是 包含 “MicroMessenger” (是否为微信浏览器)

浏览器是可以调用客户端的特定Api的。比如jsbridge

如果不存在或者调用失败,则判断不是微信浏览器。

微信浏览器 内置了一些特有的对象 object 如果对象不存在 就不算微信内置浏览器

你只有通过二次跳转,第一次直接跳到页面,通过页面去获取信息,再自动跳转到服务端,服务端根据post或者url上的信息来再次判断

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题