类(企业微信)OAuth2授权机制与第三⽅应⽤集
成⽅案
1. 需求背景
在以YonBIP(iuap)作为数字化底座的场景中,项⽬上存在很多需要与第三⽅应⽤系统集成的需求。其中,登录
BIP平台的⽤户免登访问第三⽅应⽤是⼀种典型的场景,特别是在统⼀⻔户的建设需求中。平台实现此需求的⽅案
有多种,本⽂介绍友户通⽀持的类似微信公众号的Oauht2授权机制与第三⽅应⽤集成的⽅案。
本⽅案中,友户通提供类似微信公众号的Oauht2授权机制,当前平台的登录⽤户使⽤ yht_access_token 到友户
通⽣成 code 给到第三⽅,第三⽅通过 code 获取当前登录BIP⼯作台的⽤户信息,然后第三⽅在内部进⾏免登认证
并返回浏览器可以访问的实际访问⻚⾯。
2. ⽅案流程
如上图,⽅案的基本流程主要包括:
1、三⽅应⽤在平台进⾏注册。⽬前私有化旗舰版需要⼿动在数据库中插⼊记录,详⻅下⽂详细流程。
2、为需要跳转打开的三⽅应⽤的具体访问地址,拼接获取友户通授权 code 的URL地址。
3、将拼接的地址作为原⼦服务(数字化建模-我的应⽤-服务)或消息通知、审批待办中的具体访问地址。
4、BIP登录⽤户点击原⼦服务绑定的菜单或打开消息待办时,会触发平台友户通根据当前⽤户信息⽣成默认授权的
code,并将code作为参数 yycode 附加到要跳转的第三⽅应⽤的⽬标地址,并跳转。
5、第三⽅应⽤收到请求后获取code编码,⽬前⽀持URL跳转或直接返回JSON数据。
6、第三⽅应⽤通过在连接集成开放平台预先分配的授权KEY,调⽤平台开放API接⼝,根据上⼀步获取到的code,
拿到该code对应的BIP登录⽤户的信息。
7、第三⽅应⽤根据BIP⽤户的信息(租户ID、友户通⽤户ID、⼿机号、邮箱)进⾏内部免登处理,并将最终可访问
的地址返回(302跳转)给浏览器。
⽬前,BIP私有化旗舰版只⽀持默认授权⽅案。
3. 集成步骤
3.1 三⽅应⽤在平台注册
该步骤需要⼿动在数据库中执⾏操作,需要由平台开发团队负责实现。
1、连接平台业务数据库,打开 iuap_uuas_usercenter.oauth2_client 表,为注册的应⽤⽣成相应的记录,可
参考下⾯的SQL语句。
只需要修改 client_id , client_name , client_desc , client_secret 四个字段即可。
client_id :对应三⽅应⽤标识,⽤数字标识。
client_name : 对应三⽅应⽤名称。
client_desc :对应三⽅应⽤的描述信息。
client_secret :对应三⽅应⽤约定的解密秘钥,注意:三⽅应⽤需要使⽤此秘钥解密调⽤开放平台获取到的⽤
户信息中的⼿机号、邮箱信息。
注意:如果场景合适,可以为所有三⽅应⽤固定⼀个平台预置的默认值:391。
INSERT INTO `iuap_uuas_usercenter`.`oauth2_client` (`client_id`, `client_name`,
`client_desc`, `scope`, `client_secret`, `redirect_uri`, `grant_type`,
`access_token_expire_in`, `flag`, `create_date`, `modify_date`,
`refresh_token_expire_in`) VALUES (391, 'developer', 'developer', 7, '75798c2a-1df7-
4309-a266-77287fdad283', 'http.*', 21, 604800, 2, '2019-10-17 16:02:42', '2019-10-17
16:02:42', 1382400);
3.2 三⽅应⽤标识⽩名单
在完成三⽅应⽤的注册后,需要在平台友户通中配置⽩名单 defaultAuthCodeWhiteList 。只有在⽩名单中配置
过的三⽅应⽤标识,三⽅应⽤才能根据 code 获取⽤户⼿机号、邮箱信息,否则只能获取到⽤户租户和友户通ID。
⾸先,执⾏下⾯的SQL语句,查询是否有配置记录:
如果没有,可以通过下⾯的语句插⼊⼀条配置记录:
之后,如果需要添加更多的三⽅应⽤标识到⽩名单中,需要在 value2 已有的值列表后⾯添加,并以英⽂逗号 , 分
隔。
注意:记录更新之后需要等10分钟起效。
3.3 为三⽅应⽤⽬标地址拼接获取code的URL
注意:该地址⽀持浏览器302跳转或JSON返回。
https://业务中台域名/iuap-uuas-user/userCode/gen?service=⽬标业务系统URL&clientId=跳转⽬的系统的
ID&appId=⽣成code的客户端ID&scope=default&isNeedRedirect=true/false
service:携带code跳转的⽬标业务系统URL,需要URLEncode。
clientId:跳转的⽬标系统ID,在步骤3.1中注册,可为所有三⽅应⽤固定⼀个默认值391。
appId:⽣成code的三⽅应⽤客户端ID,平台私有化版本当前未处理。⾮302跳转返回时三⽅应⽤可使⽤此值做额
外业务区分。不单独设置时,可与跳转的⽬标系统ID保持⼀致。
scope:授权信息范围,⽬前固定写 default 。
isNeedRedirect:控制是否需要跳转到⽬标service地址,若值为false,则不进⾏跳转,接⼝将code内容返回json
格式数据: { "data":"code" } 。若值为true或不传值,则默认进⾏跳转。
3.3.1 service地址
以下⾯的URL模拟第三⽅应⽤⽬标⻚⾯的地址:
https://xxxx.com/projectA/bizPage1?param1=value1¶m2=value2
使⽤合适的⽅式对该地址进⾏URL编码
select * from iuap_uuas_usercenter.pub_configuration where key2 =
'defaultAuthCodeWhiteList';
INSERT INTO iuap_uuas_usercenter.pub_configuration (id, key2, value2, type) VALUES
(804302, 'defaultAuthCodeWhiteList', '391', 'default');