网页授权登录-开始开发.md 8.4 KB

开始开发

最后更新:2024/07/22

目录

企业微信提供了OAuth的授权登录方式,可以让从企业微信终端打开的网页获取成员的身份信息,从而免去登录的环节。
企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的UserId身份信息。

[](https://developer.work.weixin.qq.com/document/path/91335/#oauth2%E7%AE%80%E4%BB%8B)OAuth2简介

OAuth2的设计背景,在于允许用户在不告知第三方自己的账号密码情况下,通过授权方式,让第三方服务可以获取自己的资源信息。
详细的协议介绍,开发者可以参考RFC 6749

下面简单说明OAuth2中最经典的Authorization Code模式,流程如下:

流程图中,包含四个角色。

  • ResourceOwner为资源所有者,即为用户
  • User-Agent为浏览器
  • AuthorizationServer为认证服务器,可以理解为用户资源托管方,比如企业微信服务端
  • Client为第三方服务

调用流程为:
A) 用户访问第三方服务,第三方服务通过构造OAuth2链接(参数包括当前第三方服务的身份ID,以及重定向URI),将用户引导到认证服务器的授权页
B) 用户选择是否同意授权
C) 若用户同意授权,则认证服务器将用户重定向到第一步指定的重定向URI,同时附上一个授权码。
D) 第三方服务收到授权码,带上授权码来源的重定向URI,向认证服务器申请凭证。
E) 认证服务器检查授权码和重定向URI的有效性,通过后颁发AccessToken(调用凭证)

D)与E)的调用为后台调用,不通过浏览器进行

[](https://developer.work.weixin.qq.com/document/path/91335/#%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1oauth2%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B)企业微信OAuth2接入流程

图1 企业微信OAuth2流程图

[](https://developer.work.weixin.qq.com/document/path/91335/#%E4%BD%BF%E7%94%A8oauth2%E5%89%8D%E9%A1%BB%E7%9F%A5)使用OAuth2前须知

[](https://developer.work.weixin.qq.com/document/path/91335/#%E5%85%B3%E4%BA%8E%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E7%9A%84%E5%8F%AF%E4%BF%A1%E5%9F%9F%E5%90%8D)关于网页授权的可信域名

REDIRECT_URL中的域名,需要先配置至应用的“可信域名”,否则跳转时会提示“redirect_uri参数错误”。
要求配置的可信域名,必须与访问链接的域名完全一致;若访问链接URL带了端口号,端口号也需要登记到可信域名中。举个例子:

配置域名 是否正确 原因
mail.qq.com:8080 correct 配置域名与访问域名完全一致
email.qq.com error 配置域名必须与访问域名完全一致
support.mail.qq.com error 配置域名必须与访问域名完全一致
*.qq.com error 不支持泛域名设置
mail.qq.com error 配置域名必须与访问域名完全一致,包括端口号
  • 假定配置的可信域名是 mail.qq.com:
访问链接 是否正确 原因
https://mail.qq.com/cgi-bin/helloworld correct 配置域名与访问域名完全一致
https://mail.qq.com/cgi-bin/redirect correct 配置域名与访问域名完全一致,与协议头/链接路径无关
https://exmail.qq.com/cgi-bin/helloworld error 配置域名必须与访问域名完全一致

[](https://developer.work.weixin.qq.com/document/path/91335/#%E5%85%B3%E4%BA%8Euserid%E6%9C%BA%E5%88%B6)关于UserID机制

UserId用于在一个企业内唯一标识一个用户,通过网页授权接口可以获取到当前用户的UserId信息,如果需要获取用户的更多信息可以调用 通讯录管理 - 成员接口 来获取。

[](https://developer.work.weixin.qq.com/document/path/91335/#%E9%9D%99%E9%BB%98%E6%8E%88%E6%9D%83%E4%B8%8E%E6%89%8B%E5%8A%A8%E6%8E%88%E6%9D%83)静默授权与手动授权

  • 静默授权:用户点击链接后,页面直接302跳转至 redirect_uri?code=CODE&state=STATE
  • 手动授权:用户点击链接后,会弹出一个中间页,让用户选择是否授权,用户确认授权后再302跳转至 redirect_uri?code=CODE&state=STATE

[](https://developer.work.weixin.qq.com/document/path/91335/#%E4%B8%AA%E4%BA%BA%E6%95%8F%E6%84%9F%E4%BF%A1%E6%81%AF%E6%8E%88%E6%9D%83%E7%AE%A1%E7%90%86)个人敏感信息授权管理

用户首次进入oauth2页面进行手动授权后,30天内再次进入应用页面不会再弹出授权页,默认授权用户当前授权的敏感信息。若30天内用户需要修改个人敏感信息授权,可进入应用详情页的“个人敏感信息授权管理”页面,重新更改个人敏感信息授权。

目前仅2022.6.20 20:00后新创建的的自建应用以及代开发应用或者所有的第三方应用,且用户曾经通过进入oauth2页面进行手动授权过才会出现该入口。

[](https://developer.work.weixin.qq.com/document/path/91335/#%E7%BC%93%E5%AD%98%E6%96%B9%E6%A1%88%E5%BB%BA%E8%AE%AE)缓存方案建议

通过OAuth2.0验证接口获取成员身份会有一定的时间开销。对于频繁获取成员身份的场景,建议采用如下方案:
1、企业应用中的URL链接直接填写企业自己的页面地址
2、成员操作跳转到步骤1的企业页面时,企业后台校验是否有标识成员身份的cookie信息,此cookie由企业生成
3、如果没有匹配的cookie,则重定向到OAuth验证链接,获取成员的身份信息后,由企业后台植入标识成员身份的cookie信息
4、根据cookie获取成员身份后,再进入相应的页面