更新时间:2024-10-23 GMT+08:00
分享

自定义认证

概述

通过自定义认证,将客户的CA用于API调用的第二重认证。

自定义认证包括前端和后端两种类型:

  • 前端自定义认证:指ROMA Connect使用自定义的认证函数,对收到的API请求进行安全认证。
  • 后端自定义认证:指API的后端服务使用自定义的认证函数,对来自ROMA Connect转发的后端服务请求进行安全认证。

本章节主要介绍如何创建一个前端自定义认证。您需要先创建一个函数后端作为认证函数,并在自定义认证中使用该函数后端作为认证后端。

前提条件

已获取CA认证鉴权接口地址,且打开“实例信息“-->“公网出口“-->“服务集成APIC出口地址“开关。并在防火墙中放开APIC出口地址。

操作步骤

  1. 登录ROMA Connect控制台,在“实例”页面单击实例上的“查看控制台”,进入实例控制台。
  2. 在左侧的导航栏选择“服务集成 APIC > 自定义后端”,在“后端列表”页签中单击“创建后端”。
  3. 在创建后端页面配置后端信息,完成后单击“立即创建”。

    • “后端请求方法”必须为“POST”。
    • 入参无需设置,用于自定义认证的函数后端会获取API请求中的Header和Query参数。
    • 其他参数请参考创建函数后端进行设置。后端创建完成后,页面自动跳转到后端列表页面。
      图1 创建后端

  4. 在后端列表中单击自定义后端的名称,进入后端编辑器页面。
  5. 在编辑器的左上角单击“文件 > 新建函数后端 > 空白模板”,在弹窗中单击“确定”,然后编写用于安全认证的函数脚本,完成后单击“保存”。

    函数后端调用CA接口进行token验证的js脚本示例如下:

    importClass(com.roma.apic.livedata.client.v1.HttpClient); 
    importClass(com.roma.apic.livedata.config.v1.HttpConfig); 
     
    //CA的token验证接口,入参需要idAccessToken 
    var address = "http://120.46.162.201:60991/trust-access/id/corporate" 
    function execute(data) { 
      data = JSON.parse(data) 
      //自定义验证的函数后端会将请求的headers中的所有参数放在body中,具体路径为data.body.headers[] 
      var token = data.body.headers["idaccesstoken"] 
      var result = { 
          "status": "deny" 
      } 
      var requestConfig = new HttpConfig(); 
      requestConfig.setMethod('GET'); 
      requestConfig.setUrl(address); 
      requestConfig.setContent("body"); 
      requestConfig.setParameter("idaccesstoken",token); //js不区分大小写,请使用全部小写的参数名 
      requestConfig.setContentType('application/json'); 
     
      var httpClient = new HttpClient(); 
      var resp = httpClient.request(requestConfig) 
     
      if (JSON.parse(resp.body().string())["result"]){ 
          result = { 
              "status": "allow", 
              "context": { 
                  "token": token, 
                } 
            } 
        } 
        return result 
    }

    从data中获取访问令牌后,将访问令牌放在请求头headers中的idAccessToken中,对CA的token验证接口进行访问。

    当id_access_token值校验通过后会返回: 
    { 
    "msg": "成功", 
    "result": True, 
    "code": 0 
    } 
    当id_access_token为其他值时就会返回: 
    { 
    "msg": "失败", 
    "result": False, 
    "code": 1 
    }

    注意原请求的headers和param都被ROMA放在了函数后端的body中,token的取出方式请参考上述代码中的路径。

    函数脚本定义的响应消息:

    响应消息体不能大于1M,响应内容必须满足如下格式:

    {   
     "status": "allow/deny",   
     "context": {     
     "user": "abc"  
     } 
    }
    • status:必选字段,用于标识认证结果。只支持“allow”或“deny”,“allow”表示认证成功,“deny”表示认证失败。
    • context:必选字段,为认证的响应结果。只支持字符串类型键值对,键值不支持JSON对象或数组。

    context中的数据为您自定义的字段,认证通过后可作为系统参数(前端认证参数)映射到API的后端服务请求参数中。其中API后端服务中填写的“系统参数名称”与context中的参数名称必须完全一致,且区分大小写。context中的参数名称必须以英文字母开头,支持英文大小写字母、数字、下划线和中划线,且长度为1-32个字符。

  6. 测试函数后端的功能。

    在页面右上角单击“测试”,在下方的“测试参数”处,根据函数后端中的脚本定义,增加认证所需的请求参数,然后单击“立即测试”,发送请求。当测试结果返回的status值为“allow”时,表示测试成功。“测试参数”处填写的是后端请求参数,Header、Query和Body认证参数均需要填写在后端请求的Body参数中,以步骤步骤5的脚本示例为例,各认证参数的填写示例如下:

    { 
        "headers": 
        { 
            "idaccesstoken":"huawei@123" 
        } 
    }

  7. 部署函数后端:后端测试完成后,在页面右上角单击“部署”,在确认弹窗中单击“确定”,部署函数后端。
  8. 创建自定义认证:

    • 在实例控制台左侧的导航栏选择“服务集成 APIC > API策略”,在“自定义认证”页签下单击“创建自定义认证”。
      图2 创建自定义认证
    • 在创建自定义认证弹窗中配置后端自定义认证信息,完成后单击“确定”。
      图3 确定

  9. 为API绑定自定义认证:启用第三方CA的验证需要在创建API时开启双重认证,或编辑API开启支持双重认证。选择以上步骤创建的自定义认证。

    图4 API绑定自定义认证

相关文档