基于钉钉应用的免登安全交互方案

一、背景描述

钉钉提供了应用市场功能,市场中提供了各种各样的应用,这些应用都是基于钉钉的开放平台规范进行开发的。钉钉的开放平台有自己的用户体系,自有应用(企业自己的应用程序)也有独立的用户体系,如何保证双方用户互通、以及安全交互是本文讨论的问题。
基于钉钉应用的免登安全交互方案_第1张图片

二、面临的问题

1、钉钉用户如何与自有用户(企业自己的用户)打通。
钉钉开放平台提供接口,可以获取对应企业下的钉钉用户信息,将 dingUserId(钉钉用户id) 与 localUserId(自有用户id) 进行一一映射,在登录时可以通过映射关系将用户关联起来。

在进行映射前,需要约定好用户唯一标识,如:手机号、邮箱、工号等。映射方式可以是人工匹配,也可以通过双方系统中的用户唯一标识进行自动匹配。

2、如何保证是合法用户,并且不可以水平越权。
见安全交互流程。

三、安全交互流程

基于钉钉应用的免登安全交互方案_第2张图片
1、authToken 生成方案
采用 UUID 工具生成的 32 位随机字符串。
合法性校验规则:[0-9a-f]{32}。

2、authToken 刷新
前端定时刷新 authToken,定时周期小于 authToken 的缓存时间。在调用接口时,如果服务端返回的是 authToken 过期,前端也会刷新 authToken。

3、authToken 缓存清除
1)超时后自动删除。
2)在每次刷新 authToken 时,将 oldAuthToken 传入,服务端会先将 oldAuthToken 的缓存时间置为 60 秒,然后生成 newAuthToken。oldAuthToken 的缓存时间设置为 60 秒,是为了方便并行进行的接口调用,这个缓存时间可以设置的更小一些。

4、该方案存在的问题
如果 authToken 被劫持了,黑客可以通过 authToken 恶意获取系统数据。因此 authToken 的缓存时间要尽可能的小,比如5分钟。接口一定要进行水平越权校验,这样可以保证 authToken 泄露后,黑客获取到的数据是有限的。

钉钉接口文档:
1、获取免登授权码接口文档
2、获取 access_token 接口文档

你可能感兴趣的:(钉钉E应用,钉钉企业应用,钉钉开放平台,钉钉安全交互方案,钉钉免登,架构设计,Java编程,spring编程)