企业微信自建应用授权登录(内嵌式扫码登录)

企业微信提供了OAuth的扫码登录授权方式,可以让企业的网站在浏览器内打开时,引导成员使用企业微信扫码登录授权,从而获取成员的身份信息,免去登录的环节。(注:此授权方式需要用户扫码,不同于“网页授权登录”;仅企业内可以使用此种授权方式,第三方服务商不支持使用。)

企业微信自建应用授权登录(内嵌式扫码登录)

WEB网页------设置授权回调域,这里的回调域,只是一个域名,对应自己的项目访问域名。可以使用花生壳或者ngrok,授权登录不涉及微信jsapi,所以可以使用内网穿透工具,因为域名可以不备案。

  • 假定重定向访问的链接是:http://mail.qq.com:8080/cgi-bin/login:
配置域名 是否正确 原因
mail.qq.com:8080 企业微信自建应用授权登录(内嵌式扫码登录) 配置域名与访问域名完全一致
email.qq.com 企业微信自建应用授权登录(内嵌式扫码登录) 配置域名必须与访问域名完全一致
support.mail.qq.com 企业微信自建应用授权登录(内嵌式扫码登录) 配置域名必须与访问域名完全一致
*.qq.com 企业微信自建应用授权登录(内嵌式扫码登录) 不支持泛域名设置
mail.qq.com 企业微信自建应用授权登录(内嵌式扫码登录) 配置域名必须与访问域名完全一致,包括端口号

http://mail.qq.com:8080

企业微信自建应用授权登录(内嵌式扫码登录)

不包括协议头

 这里我选择了内嵌式扫码登录,比较实用,直接在自己项目的前端页面里面嵌入就可以扫码登录了,一般我们访问一些网站时,碰到的就是这种。

比较说****网站的微信扫码登录

我们选择微信扫码登录时,刷新页面,有两个html,一个是登录页面html,一个是请求微信端的html。

 

企业微信自建应用授权登录(内嵌式扫码登录)

 

企业微信自建应用授权登录(内嵌式扫码登录)

          红线标注的为redirect_uri,授权登录成功后的页面,当我们没有登录直接访问时

企业微信自建应用授权登录(内嵌式扫码登录)

 

授权登录实现

首先,登录企业微信后端设置,Web网页,授权回调域:可以使用花生壳的免费域名,或者是ngrok动态生成的

企业微信自建应用授权登录(内嵌式扫码登录)

在我们自己项目的登录页面,涉及的关于微信端参数为:

  1. window.WwLogin({
  2. "id" : "wx_reg",
  3. "appid" : "",
  4. "agentid" : "",
  5. "redirect_uri" :"",
  6. "state" : "",
  7. "href" : "",
  8. })
参数 必须 说明
id 企业页面显示二维码的容器id
appid 企业微信的CorpID,在企业微信管理端查看
agentid 授权方的网页应用ID,在具体的网页应用中查看
redirect_uri 重定向地址,需要进行UrlEncode
state 用于保持请求和回调的状态,授权请求后原样带回给企业。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议企业带上该参数,可设置为简单的随机数加session进行校验
href

自定义样式链接,企业可根据实际需求覆盖默认样式。详见文档底部FAQ

 

 注意:redirect_uri重定向地址的url,前缀一定要和网页授权回调域名相同,切勿使用http://localhost:8080

所以我们请求时,首先要携带参数到前端页面,当然也可以使用ajax,我这里为了方便直接controller跳转了。

PropertiesUtil是一个工具类,可以取出存储在properties文件中的参数数据,这里可以按照自己的习惯规范,如果只是为了测试的话,也可以直接写数据。

企业微信自建应用授权登录(内嵌式扫码登录)

scanlogin.jsp页面

在需要展示企业微信网页登录二维码的网站引入如下JS文件,(支持https):
          http://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js

 

企业微信自建应用授权登录(内嵌式扫码登录)

 现在我们就可以访问scan_login.do了,可以刷新出二维码,使用企业微信客户端进行扫码,也可以使用微信扫码登录,微信扫码登录时会询问打开企业微信。授权登录即可。

企业微信自建应用授权登录(内嵌式扫码登录)

授权回调域名错误,会出现如下异常:

企业微信自建应用授权登录(内嵌式扫码登录)

因为每次授权登录时,企业微信端都会回调url域名进行验证。验证不通过时,就会出现异常。

企业微信自建应用授权登录(内嵌式扫码登录)

授权回调域必须与redirect_uri前的域名相同

企业微信自建应用授权登录(内嵌式扫码登录)