找回密码
 立即注册

QQ登录

只需一步,快速开始

诗仙·1957
金牌服务用户   /  发表于:2024-10-19 14:58  /   查看:306  /  回复:3
1金币


开放平台文档中心 (teambition.com)

这个跟钉钉扫码登录很类似,用于把活字格开发的页面嵌入对方的系统,对方的系统是钉钉扫码登录了,要实现对方已登录后,访问活字格页面不再需要登录。

对方新建应用并设置入口地址(活字格的发布后的页面地址),当点击这个应该时候,访问的url,或带有userid信息,这个userid是对方的系统的userid,在活字格系统中没有这个用户名。

我猜测:
假如发布后的页面地址是http://abc.com/aaa作为应用的入口地址,
那么对方在点击应用时候,访问这个地址http://abc.com/aaa?userid=????
此时我设置这个页面为匿名访问 页面加载时写js  判断当前系统是否有登录用户,
没有登录则获取url中的userid,然后在数据库中查找这个userid对应的活字格系统用户 的用户名,
然后以这个用户名去发起活字格单点登录的api接口获取token,拿到token后,拼接Url 发给对方api接口 传递这个url地址,对方返回一个code信息,再次拼接url,并打开新的url
但总感觉不正确
如果这个页面是要登录权限,当我在这个aaa页面写任何逻辑都逃不开未登录跳登录页面的准则。

因此正确的思路是????



帮你打开活字格更神奇的功能:九十七、普通认证模式下实现钉钉单点登录 - 活字格专区 - 专题教程 - 葡萄城开发者社区 (grapecity.com.cn)
这个webapi源码,希望能抄一下思路跟方案,然后手搓一个接口。

已知活字格的单点登录原理
是用户名加设定单点登录密码  发起接口获取token,然后拼接token 打开拼接后的url就能直接以这个用户登录这个页面 并打开页面了。


在线等

最佳答案

查看完整内容

问题跟进:大佬可以以帖子中钉钉单点登录活字格应用的思路参考源码实现。

3 个回复

倒序浏览
最佳答案
最佳答案
Shawn.Liu活字格认证
超级版主   /  发表于:2024-10-19 14:58:16
来自 2#
问题跟进:大佬可以以帖子中钉钉单点登录活字格应用的思路参考源码实现。
回复 使用道具 举报
诗仙·1957
金牌服务用户   /  发表于:2024-11-1 10:51:34
3#
本帖最后由 诗仙·1957 于 2024-11-1 11:03 编辑
Shawn.Liu 发表于 2024-10-19 14:58
问题跟进:大佬可以以帖子中钉钉单点登录活字格应用的思路参考源码实现。

成功写出了这个代码后,对于新手的我来说简单的理解一下这个思路:



对方的系统点击活字格的页面的时候,在没有成功写出代码的时候的理解为,这里跳转的链接是指发布后的活字格页面url地址,实际上这里正确的是指活字格webapi的地址,这一点是成功与不成功最关键的理解。
对方系统点击链接或者按钮弹出或者打开的活字格页面地址是一个webapi的地址,这个很重要,可以简单理解为webapi与页面直接的关系也类似与post请求的过程,这不过这里由代码控制了逻辑。你访问活字格普通的页面实际也差不多是一个post请求过程。

那么正确流程应该是:
对方系统点击打开活字格webapi  地址  
这个webapi是你自己写的逻辑,那么对方在访问活字格页面的时候实际上是一个post请求的过程,请求的url中包含有用户id 或者企业id这些信息。
你需要提取url中的用户id然后判断这个ID在自己的系统中是否存在(参考文档),如果不存在就需要创建,存在就需要用这个用户id+设定的单点登录密码,然后对自己发起token的请求(参考文档)。拿到token后,再拼接地址,302跳转(注意这里是跳转不是返回或者响应)到这个地址,就会变成了以这个用户登录了活字格的系统

那么中间还有插曲,对方的用户ID在你的系统中的用户ID可能不一样,此时,你需要在获取对方用户ID时候,再向对方发起api请求或者这个用户的信息,例如用户名这种关键信息,这个用于在自己系统找不到对应的用户ID时候创建用户需要这个,

那么他这个系统中还有一个获取授权用户token的目的是为了防止不明身份的向对方请求获得用户信息,因此在获取用户信息的时候需要你先获取这个用户的用户token,拿到用户token后才能向对方获取用户信息。

总体代码解析:

对方第一次跳转过来的时候是不带有code信息,第2次才会有,
这里写if判断,
为了表达所有步骤成功后,最后要去的页面,这里直接采用了配置文件设定法,string? pageName = config.pageName; //最后302跳转的页面名称
然后给一些通用变量设置为空值,然后先执行GenerateJwtToken(appID, appSecret); 去获取用户token

后面这里就是获取用户信息,判断用户是否存在,
不存在就添加用户

最后拼接跳转

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +300 收起 理由
Shawn.Liu + 300 赞一个!

查看全部评分

回复 使用道具 举报
Shawn.Liu活字格认证
超级版主   /  发表于:2024-11-1 11:09:51
4#
诗仙·1957 发表于 2024-11-1 10:51
成功写出了这个代码后,对于新手的我来说简单的理解一下这个思路:

感谢大佬的分享,赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部