钉钉如何跳转PC浏览器免登访问苍穹
1 业务背景
客户使用钉钉免登苍穹,目前苍穹提供与钉钉集成的标准配置方案,该方案是通过钉钉内置浏览器免登苍穹。部分客户使用钉钉免登苍穹时,希望钉钉能自动跳转到PC端浏览器免登苍穹,详见解决方案:
2 解决方案
在了解苍穹免登原理的基础上,可以进一步对此二开,在钉钉客户端访问苍穹登录页时,增加自定义脚本拦截钉钉客户端来源的前端登录请求,然后在构造已授权的免登url并调用钉钉接口打开PC端浏览器页面。
2.1 实现步骤
钉钉原始免登苍穹流程:钉钉点击轻应用url后,触发后端单点及免登检查,第一次不通过重定向会前端登录页,触发前端脚本构造免登授权code追加到url重定向参数后进行第二次重定向,进入到后端免登插件以及用户检查通过后登录系统。基于此编写前端脚本,拦截钉钉客户端的免登流程。
(function () { var loadScript = function (url, cb) { var script = document.createElement('script'); script.src = url; var firstScript = document.getElementsByTagName('script')[0]; firstScript.parentNode.insertBefore(script, firstScript); // script 加载完毕后调用方法 script.onload = script.onreadystatechange = function () { if (!this.readyState //这是FF的判断语句,因为ff下没有readyState这个值,IE的readyState肯定有值 || this.readyState == 'loaded' || this.readyState == 'complete' // 这是IE的判断语句 ) { cb && cb() } }; } // 登录代码加载前调用 window.loginBeforeLoad = function (callback) { const ua = navigator.userAgent if (ua.includes('DingTalk')) { // 拦截钉钉的登录请求 - 现场可根据情况修改条件 var jsbridge = "https://g.alicdn.com/dingding/dingtalk-jsapi/3.0.12/dingtalk.open.js"; loadScript(jsbridge, () => { dd.ready(function () { // 获取重定向参数 var url = new URL(location.href) var redirect = url.searchParams.get("redirect") if (!redirect) { document.body.innerHTML = '正在跳转到浏览器打开...没有redirect参数' return } var redirect_url = decodeURIComponent(redirect) var corpid = new URL(redirect_url).searchParams.get("corpid"); if (!redirect) { document.body.innerHTML = '正在跳转到浏览器打开...没有corpid参数' return } // document.body.innerHTML = '正在跳转到浏览器打开...corpid:' + corpid // 请求用户一次性授权code dd.runtime.permission.requestAuthCode({ // 注意钉钉轻应用的回调域名与ip设置 corpId: corpid, onSuccess: function (res) { var code = res.code; // document.body.innerHTML = '正在跳转到浏览器打开...code:' + code var r = redirect_url; r.indexOf("&code=") > -1 && (r = res.replace(/&code=/g, "&errorCode=")); r = r.concat("&code=").concat(code) // 未处理hashtag document.body.innerHTML = '正在跳转到浏览器打开...redirect' // 跳转PC浏览器 dd.biz.util.openLink({ url: r, onSuccess: function () { document.body.innerHTML = '正在跳转到浏览器打开...' dd.biz.navigation.close({ // 关闭钉钉页面 onSuccess : function(res) {}, onFail : function(err) {} }) }, onFail: function (err) { document.body.innerHTML = '正在跳转到浏览器打开...err:' + JSON.stringify(err) } }) }, onFail: function (err) { document.body.innerHTML = '正在跳转到浏览器打开...err:' + JSON.stringify(err) } }) }) }) } else { // 继续执行登录代码,执行 callback 注意:如果不执行callback登录页面不渲染 callback() } } })()
以上js代码需要符合登录页自定义js模板格式,并且需要在 login_index.js 和 login_index_m.js 两个文件中均实现,分别对应pc端登录页和移动端登录页。
编写后打包为zip文件上传到登录页配置即可
配置完成保存后,到钉钉中访问配置好的标准免登格式的url即可实现跳转浏览器免登,建议先测试不跳转浏览器的情况,如果是可以正常在钉钉内免登苍穹哪就是正确配置好了免登环境,直接使用改脚本即可
2.2 实现效果
配置自定义js后,访钉钉的轻应用,这里配置了一个访问苍穹首页的轻应用
待办链接访问,标准产品钉钉渠道固定发送移动端地址,会访问移动端页面
3 注意事项
轻量级环境环境登录页配置增加自定义js文件后可能出现静态文件找不到的情况,可手动复制这两个文件到静态文件目录,如 C:\Users\xxx\cosmic\home\static-file-service\isv\xxx\login_index.js
在钉钉访问的url可以自定义格式,关键的免登流程可由二开js构造后重定向,最后重定向的url必须满足苍穹免登插件的指定格式,才能实现浏览器免登
这里js是在登录页配置的,因此如果钉钉浏览器已经登录了苍穹,是不会触发该跳转逻辑的
这里免登走的是标准产品的第三方应用免登流程,不是sso单点登录,没有预置多用户踢出的接口,如果用户在PC浏览器已经使用了用户A登录苍穹,而钉钉免登是使用的是用户B,系统将不会更新登录用户,即仍然是用户A访问系统,已经登录系统的用户不会被踢出
4 相关文档
钉钉如何跳转PC浏览器免登访问苍穹
本文2024-09-23 00:33:41发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140250.html