本帖最后由 杨童 于 2024-7-29 23:47 编辑
1. SDK+https场景概述: 这里简单介绍一下零信任的SDK方案(详细建议先去看23年7月的破雾计划中关于SDK的基础讲解)零信任的SDK可以理解成APP中的一个模块,此模块配置后会接管APP本身的认证和网络转发等功能,APP输入的账号密码会先发给SDK模块,由SDK传到零信任控制中心,控制中心认证后再把结果返回SDK,SDK再传给APP本身,流量同理。可以把SDK理解成认证和网络的代理服务器。建议结合如下流程图理解HTTPS+SDK
2. 结合SDK集成文档理解 关于SDK集成中涉及https认证内容的部分是3.2.6外部认证, https://bbs.sangfor.com.cn/atrustdeveloper/appsdk/android/android_sdk_other_auth.html
其中介绍了APP和SDK之间传参的代码配置内容,理解了代码就能更好的理解整个工作流程(具体代码怎么写不需要一线关心,只是借助代码理解工作流,形成基本沟通思路,尽可能的和三方研发平等交流)
需要理解的内容如下: 以下两张图列举了请求和响应代码的示例 第一张图大意为:APP在开发时,需要把账号密码或者其他信息传到SDK的username和password字段中,然后SDK会把这两个字段传给零信任控制中心 第二张图大意为:零信任认证后的信息(成功和失败)会传到指定键值,APP直接从SDK的这个键值中提取结果就能获得认证结果
结合以上,将工作流细化为如下图:
3. SDK信息透传场景: 在SDK场景下,APP客户端和认证服务器之间可能存在个性化传参,因为APP客户端和认证服务器之间的信息传输都要经过SDK和零信任控制中心,所以需要零信任配合将个性化参数做透传,具体是两个场景:一是APP传参到认证服务器,二是认证服务器传参给APP
接下来介绍两个场景的需求示例/配置/实现原理 3.1. 场景1:APP传参到认证服务器 具体场景举例: APP生成自定义的客户端ID给到认证服务器,用于辅助认证或者标识用户和终端对应关系(具体作用和零信任无关,零信任只要负责传参即可) 认证服务器侧提供的接口文档如下,请求参数中定义了一个客户端ID的键值对,需要零信任把该字段透传到认证服务器
3.1.1. 原理及配置思路 首先看SDK集成文档中关于外部主认证传参部分介绍,下图红框完整内容为: * 传递单个信息可以直接放到密码字段直接传递,如果传递多个字段,建议使用json格式(也可以不是json格式,只是示例,可以随意自定义格式)sdk把整个 userName 和 password 当作字符串透传到服务端,服务端再去解析具体的值,或者直接传递第三方认证服务端对接
意思就是,如果有个性化自定义的字段,直接放在password字段中即可,结合本案例,代码可以写成如下(如果有多个字段也可以依次添加):
String password = "{client_id:1,password:"123456"}";
控制中心配置: 由于SDK中的password字段定义了两个键值对,一个是客户端id,一个是密码,那么password字段传输到控制中心后,字段名会变成user.userpassword,值为 client_id:1,password:123456 这时候直接调用user.userpassword的话,这一个字段的值就等于client_id:1,password:123456,传到认证服务器的话,认证服务器无法处理此数据(一般不行,但如果认证服务器单独开发识别此格式也可以),所以需要控制中心对此数据进行处理,此时就需要使用自定义请求变量功能,通过js代码将客户端id和密码字段分离,使请求参数/请求体可以单独调用,自定义请求变量代码如下图,代码含义为:将user.Password字段中的client_id和password字段分别赋值给两个新的自定义的键值对env.client_id和env.password
经过以上js代码的转换,请求参数/请求体在调用客户端和密码字段时,对应的键值对应该调用的是env.client和env.password,配置示例如下,代码含义为:根据认证服务器接口文档要求,账号、密码、客户端id三个字段名为user-name/user-password/clientid 这三个字段的值,分别取自SDK传来的默认值user.username和经过自定义请求变量处理过生成的新键值对env.Password和env.client
以上配置完毕即可实现APP到认证服务器间自定义参数的透传,具体流程图原理如下
3.2. 场景2:认证服务器传参给APP 具体场景举例: APP内部的应用存在单点登录场景,需要认证服务器认证后产生token字段返回给APP,APP拿到token字段后,APP内部的应用利用token字段做单点登录(具体作用和零信任无关,零信任只要负责传参即可) 认证服务器侧提供的接口文档如下,返回参数中定义了token/url等字段,需要零信任认证服务器回复的这些字段透传给APP
3.2.1. 原理及配置思路: 先看SDK集成文档中对于透传返回参数的说明,意思就是认证服务器返回的内容会默认保存到名为mServerinfo的函数
而mServerinfo函数内容的来源对应到零信任配置中就是响应配置中的“扩展字段”,如下图配置,意思就是把认证服务器返回的名为msg的键值对,赋值到扩展字段
控制中心会把扩展字段的内容写到mServerinfo函数中,完成数据透传 结合本案例实际配置思路: 本案例中需要透传的返回信息有如下三个字段
但是零信任的特性是只允许透传一个字段,如果像下图一样分别将url和token解析到扩展字段,那么实际透传过去的只有最后一个token字段(机制就是透传最下边的)
透传多个参数思路: 1、将多个键值合并成一个键值调用(使用响应预处理的js代码处理,本文不做介绍) 2、调用父级字段(本案例适用) 思路2说明如下,分析响应示例代码,响应参数为json格式,需要透传的三个键值都是属于一个名为“result”的字段
所以只要调用result字段即可,整个result字段包含的三个键值都会传到SDK的mServerinfo函数中
经过以上配置思路即可实现认证服务器给APP信息的透传 流程图示例如下:
|