
# 第三方集成ISDP移动端页面方案
#### 目的
本案例主要目标用于指导实现ISDP App移动端非H5页面被第三方用户系统App端快速集成，包括实现时序图、关键节点和接口，以及明确实现责任方。
![](https://support.huaweicloud.com/isdp_faq/public_sys-resources/note_3.0-zh-cn.png)
"第三方用户系统"指对接华为ISDP系统的具体用户系统。
#### 时序图
![](https://support.huaweicloud.com/isdp_faq/zh-cn_image_0000001703581137.png "点击放大")
时序图主要包括交互节点，具体如下：
1. 伙伴移动端登录 同时，伙伴服务端需要自认证鉴权（保证向ISDP发起的请求是可信的）
   
2. 向ISDP发起SSO单点登录认证（getToken）（携带ISDP账号） 同时，ISDP服务端需要自认证鉴权
   
3. ISDP服务端向伙伴服务端返回用户信息和ISDP Token
4. 伙伴服务端向伙伴移动端返回ISDP Token
5. ISDP移动端页面调用伙伴移动端端接口，获取ISDP Token
6. 伙伴移动端向ISDP移动端页面返回ISDP Token
7. ISDP移动端实现登录ISDP和Appcube（低码平台页面）
![](https://support.huaweicloud.com/isdp_faq/public_sys-resources/note_3.0-zh-cn.png)
伙伴移动端，即第三方用户App移动端；伙伴服务端，即第三方用户系统服务端。
#### 集成步骤
1. 伙伴App移动端登录。 
   伙伴输入登录信息，登录自有App移动端，同时伙伴服务端针对登录信息进行认证鉴权。
   
   
2. 向ISDP发起SSO单点登录认证（getToken）（携带ISDP账号）。 
   1. 添加ISDP用户账号。 在ISDP+人员管理页面https://***{domain}***/admin/#/pub/personList（页面菜单路径：公共平台 \> 系统配置 \> 用户权限 \> 用户）添加第三方系统账号。
      例如：第三方系统存在账号**test** ，需要在人员管理新建人员账号为**test**的人员数据。
      ![](https://support.huaweicloud.com/isdp_faq/zh-cn_image_0000001703581133.png "点击放大")
      
   
   2. 分配clientId和clientsecret （ISDP+）。
      1. ISDP超级管理员在console页面oauth2集成配置页面，新建集成客户端。
      
      2. ISDP控制台地址：https://***{domain}***/console#/sysAdmin/oauth2IntegrationConfig
      
      3. 将生成的客户端id和密码发给第三方系统。 ![](https://support.huaweicloud.com/isdp_faq/zh-cn_image_0000001655461746.png "点击放大")
         
       
   
   3. 配置IP白名单（ISDP+）。
      1. 第三方反馈他们的服务器ip给ISDP，ISDP超级管理员将ip配置到[2.b]建好的客户端中。
         ![](https://support.huaweicloud.com/isdp_faq/zh-cn_image_0000001703661873.png "点击放大")
         
      
      2. 第三方的服务器ip申请ISDP开发中心（低码开发工具）的白名单。 由支持人员在产品内部申请。
         ![](https://support.huaweicloud.com/isdp_faq/public_sys-resources/note_3.0-zh-cn.png)
         如没申请添加低码开发工具的白名单，第三页面访问时会出现跨域异常（cross-region、或403等信息），主要因为跨域后不允许接口访问。
         
       
   
   4. 开发获取token的接口（第三方）。 第三方开发一个接口获取isdp+的token供第三方前端使用（请注意不是前端直接访问）。
      isdp+接口格式如下：
      - 请求url：https://***{domain}***/oauth2/oauth/rest_token
      
      - 请求方法：POST
      
      - Content-Type：application/json
      
      - 请求参数：
        ```
        {
             "client_id":"{客户端id}",
             "client_secret":"{客户端密码}",
             "username":"{账号}",
             "login_type":"server_auth"
        }
        ```
        ![](https://support.huaweicloud.com/isdp_faq/public_sys-resources/note_3.0-zh-cn.png)
        客户端id和客户端密码为[2.b]中分配的clientId和clientsecret。
        同时，ISDP服务端进行认证鉴权。
        
      
      - 返回值，如[3]。
       
   
   
   
   
3. 返回用户信息和ISDP Token给伙伴服务端。
   
   返回值：
   ```
   {
        "access_token":"xxxxxx",
        .....
   }
   ```
   
   
4. 伙伴服务端把ISDP Token返回给伙伴App移动端。 
   ```
   {
        "access_token":"xxxxxx",
        .....
   }
   ```
   
   
5. ISDP移动端页面调用伙伴移动端接口，获取ISDP Token。 
   1. 伙伴移动端开发两个接口给ISDPApp移动端调用，（**第三方提供** ）2个接口包括：
      - 网页js请求Apk的原生方法，getClientToken
      
      - 方法回调定义window的回调函数getClientTokenCallback
      
      
      页面获取到回调之后，立即到将获取的token（下面的access_token）提交到服务器去验证。
      ![](https://support.huaweicloud.com/isdp_faq/zh-cn_image_0000001655302426.png "点击放大")
      ![](https://support.huaweicloud.com/isdp_faq/zh-cn_image_0000001655302430.png "点击放大")
      
   
   2. ISDP低码开发工具（Appcube）应用引入库：isdpBaskSDK1.2.6。 该组件功能包括：移动端、web端登录，及token获取，但未包括保活功能。
      ![](https://support.huaweicloud.com/isdp_faq/zh-cn_image_0000001703581145.png "点击放大")
      ![](https://support.huaweicloud.com/isdp_faq/public_sys-resources/note_3.0-zh-cn.png)
      这种不需要接口地址是移动端封装好的，我们通过window.webview.postmessage直接调用就行。
      
   
   
   
   
6. 伙伴App移动端返回ISDP Token。 
   返回信息，包括：
   ```
   {
        "access_token":"xxxxxx",
        .....
   }
   ```
   
   
7. 登录ISDP和AppCube。 
   免密登录ISDP和AppCube，直接访问ISDP App移动端非H5页面。例子：
   创建隐患
   https://AppCube域名/magno/render/ISDP__SecurityRisk_AppCube租户ID/hiddenTroubleCreateApp
   执行隐患
   https://AppCube域名/magno/render/ISDP__SecurityRisk_AppCube租户ID/mobileRiskControlExecutionPage
   
   
 
