钉钉如何跳转PC浏览器免登访问苍穹

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

钉钉如何跳转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浏览器免登访问苍穹

1 业务背景 客户使用钉钉免登苍穹,目前苍穹提供与钉钉集成的标准配置方案,该方案是通过钉钉内置浏览器免登苍穹。部分客户使用...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息