×

零信任http(s)+sdk场景传参逻辑配置详解
  

杨童 4024

{{ttag.title}}
本帖最后由 杨童 于 2024-7-29 23:47 编辑

简介:本文在 零信任http(s)认证场景原理和配置详解 的基础上对零信任的https认证+SDK集成场景的传参逻辑和配置做了解释说明,建议先阅读前置文章再看本文



1. SDK+https场景概述:
这里简单介绍一下零信任的SDK方案(详细建议先去看23年7月的破雾计划中关于SDK的基础讲解)零信任的SDK可以理解成APP中的一个模块,此模块配置后会接管APP本身的认证和网络转发等功能,APP输入的账号密码会先发给SDK模块,由SDK传到零信任控制中心,控制中心认证后再把结果返回SDK,SDK再传给APP本身,流量同理。可以把SDK理解成认证和网络的代理服务器。建议结合如下流程图理解HTTPS+SDK


在本人的另一篇文章 零信任http(s)认证场景原理和配置详解 中描述了第4、5步的配置原理,接下来重点讲解关于2、7、3、6步骤的部分

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信息的透传
流程图示例如下:

打赏鼓励作者,期待更多好文!

打赏
2人已打赏

李润东 发表于 2024-7-30 15:53
  
童专 童砖  这不给我童砖那个啥说不过去
发表新帖
热门标签
全部标签>
【 社区to talk】
每日一问
干货满满
新版本体验
技术咨询
功能体验
纪元平台
GIF动图学习
标准化排查
产品连连看
社区帮助指南
自助服务平台操作指引
每周精选
社区新周刊
安全效果
技术顾问
云化安全能力
信服课堂视频
畅聊IT
技术笔记
2023技术争霸赛专题
秒懂零信任
高手请过招
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
安装部署配置
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
答题榜单公布
通用技术
卧龙计划
华北区拉练
天逸直播
以战代练
技术晨报
技术盲盒
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
西北区每日一问
升级&主动服务
高频问题集锦
POC测试案例
全能先锋系列
故障案例库

本版版主

0
2
1

发帖

粉丝

关注

40
11
5

发帖

粉丝

关注

5
3
4

发帖

粉丝

关注

65
6
1

发帖

粉丝

关注

2
4
0

发帖

粉丝

关注

0
0
0

发帖

粉丝

关注

本版达人