AI开发平台ModelArtsAI开发平台ModelArts

计算
弹性云服务器 ECS
云耀云服务器 HECS
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机 CPH
VR云渲游平台 CVR
特惠算力专区
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
内容分发网络 CDN
存储容灾服务 SDRS
弹性文件服务 SFS
云服务器备份 CSBS
云硬盘备份 VBS
数据快递服务 DES
专属企业存储服务
智能边缘
智能边缘云 IEC
EI 企业智能
EI安视服务
AI开发平台ModelArts
数据湖治理中心 DGC
数据仓库服务 GaussDB(DWS)
企业级AI应用开发专业套件 ModelArts Pro
数据湖探索 DLI
华为HiLens
云搜索服务 CSS
数据接入服务 DIS
表格存储服务 CloudTable
数据湖工厂 DLF
图引擎服务 GES
推荐系统 RES
文字识别 OCR
内容审核 Moderation
图像识别 Image
图像搜索 ImageSearch
人脸识别服务 FRS
对话机器人服务 CBS
视频分析服务 VAS
数据可视化 DLV
视频接入服务 VIS
自然语言处理 NLP
语音交互服务 SIS
知识图谱 KG
医疗智能体 EIHealth
可信智能计算服务 TICS
园区智能体 CampusGo
实时流计算服务 CS
人证核身服务 IVS
IoT物联网
设备接入 IoTDA
IoT物联网
全球SIM联接 GSL
设备发放 IoTDP
IoT开发者服务
IoT边缘 IoTEdge
IoT数据分析
路网数字化服务 DRIS
开发与运维
项目管理 ProjectMan
代码托管 CodeHub
流水线 CloudPipeline
代码检查 CodeCheck
编译构建 CloudBuild
部署 CloudDeploy
云测 CloudTest
发布 CloudRelease
移动应用测试 MobileAPPTest
CloudIDE
Classroom
软件开发平台 DevCloud
开源镜像站 Mirrors
视频
媒体处理 MPC
视频点播 VOD
视频直播 Live
实时音视频 SparkRTC
管理与部署
统一身份认证服务 IAM
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云审计服务 CTS
云日志服务 LTS
标签管理服务 TMS
资源管理服务 RMS
应用身份管理服务 OneAccess
专属云
专属计算集群 DCC
专属分布式存储服务 DSS
域名与网站
域名注册服务 Domains
云速建站 CloudSite
企业协同
华为云WeLink
会议
ISDP
解决方案
全栈专属服务
高性能计算 HPC
SAP
游戏云
混合云灾备
快视频
华为工业云平台 IMC
价格
价格原则
成本优化最佳实践
昇腾
昇腾MindX SDK (20.3)
其他
管理控制台
消息中心
产品价格详情
系统权限
我的凭证
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
应用编排服务 AOS
容器交付流水线 ContainerOps
应用服务网格 ASM
多云容器平台 MCP
基因容器 GCS
容器洞察引擎 CIE
容器批量计算 BCE
云原生服务中心 OSC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
数据库
云数据库 RDS
文档数据库服务 DDS
分布式数据库中间件 DDM
数据复制服务 DRS
数据管理服务 DAS
云数据库 GaussDB(for MySQL)
云数据库 GaussDB NoSQL
云数据库 GaussDB (for openGauss)
数据库和应用迁移 UGO
大数据
MapReduce服务 MRS
应用中间件
应用管理与运维平台 ServiceStage
分布式缓存服务 DCS
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
消息通知服务 SMN
微服务引擎 CSE
云性能测试服务 CPTS
区块链服务 BCS
API网关 APIG
应用魔方 AppCube
分布式消息服务RocketMQ版
多云高可用服务 MAS
可信跨链数据链接服务 TCDAS
企业应用
云桌面 Workspace
云解析服务 DNS
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMAExchange
ROMA API
鸿源云道
华为乾坤
安全与合规
Web应用防火墙 WAF
漏洞扫描服务 VSS
企业主机安全 HSS
容器安全服务 CGS
数据加密服务 DEW
数据库安全服务 DBSS
态势感知 SA
云堡垒机 CBH
SSL证书管理 SCM
云证书管理服务 CCM
管理检测与响应 MDR
数据安全中心 DSC
威胁检测服务 MTD
DDoS防护 ADS
云防火墙 CFW
应用信任中心 ATC
安全技术与应用
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
智能协作
IdeaHub
企业网络
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
废弃-华为乾坤安全云服务
云通信
语音通话 VoiceCall
消息&短信 MSGSMS
隐私保护通话 PrivateNumber
开发者工具
SDK开发指南
API签名指南
DevStar
HCloud CLI
Terraform
Ansible
云生态
云市场
鲲鹏
昇腾
合作伙伴中心
华为云培训中心
用户服务
帐号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
网站备案
支持计划
专业服务
合作伙伴支持计划
更新时间:2021/09/18 GMT+08:00
分享

访问在线服务(APP认证)

部署在线服务支持开启APP认证,即ModelArts会为服务注册一个支持APP认证的接口,为此接口配置APP授权后,用户可以使用授权应用的AppKey+AppSecret或AppCode调用该接口。

针对在线服务的APP认证,具体操作流程如下。

  • 开启支持APP认证功能:开启支持APP认证并创建应用。
  • 在线服务授权管理:对创建的应用进行管理,包括查看、重置或删除应用,绑定或解绑应用对应的在线服务,获取“AppKey/AppSecret”“AppCode”
  • APP认证鉴权:调用支持APP认证的接口需要进行认证鉴权,支持两种鉴权方式,您可以选择其中一种进行认证鉴权。
  • 以Python语言为例准备环境:在APP认证鉴权完成之后,您可以准备调用环境进行接口调用。
  • 调用API示例:使用授权应用信息调用该接口进行预测。

前提条件

  • 数据已完成准备:已在ModelArts中创建状态“正常”可用的模型。
  • 由于在线运行需消耗资源,确保帐户未欠费。

开启支持APP认证功能

在部署为在线服务时,您可以开启支持APP认证功能。或者针对已部署完成的在线服务,您可以修改服务,开启支持APP认证功能。

  1. 登录ModelArts管理控制台,在左侧菜单栏中选择“部署上线 > 在线服务”,进入在线服务管理页面。
  2. 开启支持APP认证功能。
    • 在部署为在线服务时,即“部署”页面,填写部署服务相关参数时,开启支持APP认证功能。
    • 针对已部署完成的在线服务,进入在线服务管理页面,单击目标服务名称“操作”列的“修改”按钮,进入修改服务页面开启支持APP认证功能。
      图1 部署页面开启支持APP认证功能
  3. 选择APP授权配置。从下拉列表中选择您需要配置的APP应用,如果没有可选项,您可以通过如下方式创建应用。
    • 单击右侧“创建应用”,填写应用名称和描述之后单击“确定”完成创建。其中应用名称默认以“app_”开头,您也可以自行修改。
    • 进入部署上线>在线服务页面,单击“授权管理”,进入“在线服务授权管理”页面,选择“创建应用”,详请参见在线服务授权管理
  4. 开启支持APP认证功能后,将支持APP认证的服务授权给应用,用户可以使用创建的“AppKey/AppSecret”“AppCode”调用服务的支持APP认证的接口。

在线服务授权管理

如果您需要使用支持APP认证功能,建议您在部署在线服务之前进行授权管理操作完成应用创建。进入部署上线>在线服务页面,单击“授权管理”,进入“在线服务授权管理”页面。在此页面您可以实现应用的创建和管理,包括查看、重置或删除应用,解绑应用对应的在线服务,获取“AppKey/AppSecret”“AppCode”

图2 在线服务授权管理
  • 创建应用

    选择“创建应用”,填写应用名称和描述之后单击“确定”完成创建。其中应用名称默认以“app_”开头,您也可以自行修改。

  • 查看、重置或删除应用

    您可以单击目标应用名称操作列的按钮完成应用的查看、重置或删除。创建完成后自动生成“AppKey/AppSecret”以供您后续调取接口进行APP鉴权使用。

  • 解绑服务

    您可以单击目标应用名称前方的,在下拉列表中展示绑定的服务列表,即该应用对应的在线服务列表。单击操作列的“解绑”取消绑定,将不再支持调用该接口。

  • 获取AppKey/AppSecret或AppCode

    调用接口需要进行APP鉴权,在创建应用时自动生成“AppKey/AppSecret”“AppCode”也可以通过单击“+添加AppCode”自动生成。

    图3 添加AppCode

APP认证鉴权

当支持APP认证功能的在线服务运行成功处于“运行中”状态,就可以对服务进行调用 。在调用之前您需要进行APP认证鉴权。

调用支持APP认证的接口有如下两种认证方式,您可以选择其中一种进行认证鉴权。推荐使用AppKey/AppSecret认证,其安全性比AppCode认证要高。

  • AppCode认证:通过AppCode认证通用请求。
  • AppKey/AppSecret认证:通过AppKey(APP访问密钥ID)与AppSecret(APP私有访问密钥),对请求进行加密签名,可标识发送方,并防止请求被修改。

您可以在服务详情页的“调用指南”页签(如图4)或者在线服务授权管理页面(如图2)获取API接口和AppKey/AppSecret和AppCode。请注意使用图中红框所示的API接口地址。

图4 获取API的接口地址

AppCode认证

当使用APP认证,且开启了简易认证模式,API请求既可以选择使用Appkey和AppSecret做签名和校验,也可以选择使用AppCode进行简易认证。ModelArts默认启用简易认证。

AppCode认证就是在调用API的时候,在HTTP请求头部消息增加一个参数“X-Apig-AppCode”(参数值为“AppCode”),而不需要对请求内容签名,API网关也仅校验AppCode,不校验请求签名,从而实现快速响应。示例代码如下:

import requests
url = 'https://e27faf2cc66a42fbad2dce18747962e5.apig.cn-north-4.huaweicloudapis.com/v1/infers/xxxxxx/goodbye'
headers={'Content-Type':'application/json',
         'X-Apig-Appcode':'dd19xxxxxx'}
response=requests.request('GET', url, headers=headers)
print(response.text)
  • 当APP不支持AppCode时,可使用AppKey进行简易认证,即在调用API的时候,在HTTP请求头部消息增加一个参数“apikey”(参数值为“AppKey”),实现快速认证。
  • 使用AppCode认证访问的更多方式可参考访问在线服务(Token认证)

AppKey/AppSecret认证

AppKey/AppSecret认证就是通过应用的AppKey和AppSecret进行签名认证。

  • AppKey:APP访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。
  • AppSecret:与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。

使用AppKey/AppSecret认证时,您需要使用专门的签名SDK对请求进行签名。

以Python语言为例准备环境

在APP认证鉴权完成之后,您可以准备调用环境进行接口调用。此章节内容以Python语言为例介绍SDK使用方式,其他语言的SDK下载与使用示例请参见《API网关 APIG开发指南》

  1. 获取API的接口地址、请求方法、AppKey和AppSecret。获取方式请参见APP认证鉴权
  2. Python官网获取并安装Python安装包(支持使用2.7.9或3.X版本)。Python安装完成后,您可以执行命令pip install requests,通过Python通用包管理工具pip安装“requests”库。

    如果使用pip安装requests库遇到证书错误,请下载并使用Python执行此文件,升级pip,然后再执行以上命令安装。

  3. IntelliJ IDEA官网获取并安装IntelliJ IDEA。在IntelliJ IDEA中安装Python插件, 如图5所示。
    图5 安装Python插件
  4. 获取SDK。下载SDK,获取“ApiGateway-python-sdk.zip”压缩包,解压后目录结构如下:
    表1 SDK压缩包解压目录

    名称

    说明

    apig_sdk\__init__.py

    SDK代码

    apig_sdk\signer.py

    main.py

    示例代码

    backend_signature.py

    后端签名示例代码

    licenses\license-requests

    第三方库license文件

  5. 新建工程。
    1. 打开IDEA,选择菜单File > New > Project。在弹出的“New Project”对话框中选择“Python”,单击“Next”
      图6 新建工程
    2. 再次单击“Next”,弹出以下对话框。单击“...”,在弹出的对话框中选择解压后的SDK路径,单击“Finish”完成工程创建。
      图7 选择解压后的SDK路径
  6. 完成工程创建后,目录结构如下。其中“main.py”为示例代码,请根据实际情况修改参数后使用。
    图8 新建工程的目录结构

调用API示例

  1. 在工程中引入“apig_sdk”
    1
    2
    from apig_sdk import signer
    import requests
    
  2. 生成一个新的Signer,填入“AppKey”“AppSecret”,获取方式请参见APP认证鉴权
    1
    2
    3
    sig = signer.Signer()
    sig.Key = "4f5f626b-073f-402f-a1e0-e52171c6100c"
    sig.Secret = "******"
    
  3. 生成一个Request对象,指定方法名、请求uri、header和body。
    r= signer.HttpRequest(method, uri, header, body)
    表2 HttpRequest参数说明

    参数

    子参数

    是否必填

    说明

    method

    -

    可填“GET”“POST”“PUT”“DELETE”

    uri

    -

    填入在线服务的API接口,获取接口方式参见APP认证鉴权

    header

    x-stage

    接口发布环境,必填,当前仅支持“RELEASE”

    Content-Type

    内容类型,当前支持“application/json”“multipart/form-data”形式请求体请参考表3

    x-sdk-content-sha256

    签名方式,可填“UNSIGNED-PAYLOAD”,表示不对body进行签名认证。

    当body为文件时,该参数必填。

    body

    -

    支持json格式,示例 :"{\"xxx\":\"xxx\"}"。

    1. 当请求体为json格式
      r = signer.HttpRequest("POST",
                             "https://1684994b180244de9d141c00d3e52c73.apig.exampleRegion.huaweicloudapis.com/v1/infers/exampleServiceId",
                             {"x-stage": "RELEASE","Content-Type":"application/json"},"{\"xxx\":\"xxx\"}")
    2. 当请求体为图片格式,您需要构造multipart/form-data形式的请求体。

      请求体样式:files={"请求参数":("文件路径",文件内容,“文件类型”,请求头)}

      表3 files参数

      参数

      说明

      请求参数

      在线服务输入参数名称。

      文件路径

      上传文件的路径。

      文件内容

      上传文件的内容。

      文件类型

      上传文件类型。当前支持以下类型:

      • txt类型:text/plain
      • jpg/jpeg类型:image/jpeg
      • png类型:image/png

      请求头

      建议填“{}”,请求头在“HttpRequest”参数“header”中填入。

      如果您访问请求参数为images,输入格式为file类型的在线服务,示例如下。

      图9 访问在线服务
      1
      2
      3
      r = signer.HttpRequest("POST","https://63fb035aeef34368880448a94cb7f440.apig.cn-north-4.huaweicloudapis.com/v1/infers/76c41384-23ab-45f9-a66e-892e7bc2be53",
      {"x-stage": "RELEASE", "x-sdk-content-sha256": "UNSIGNED-PAYLOAD"})
      files = {"images": ("flower.png", open("flower.png", "rb"), "image/png", {})}
      
  4. 进行签名,执行此函数会在请求参数中添加用于签名的“X-Sdk-Date”头和“Authorization”头。
    1
    sig.Sign(r)
    
  5. 调用API,查看访问结果。
    resp = requests.request(method,url, headers, data, files)
    表4 request参数说明

    参数

    说明

    method

    填入签名后Request对象的请求方法。

    url

    填入签名后Request对象的请求地址。

    headers

    填入签名后Request对象的headers。

    data

    填入Request对象的body请求体,仅支持Json格式。

    files

    填入multipart/form-data形式的请求体。

    1. 当请求体为json格式
      1
      2
      3
      resp = requests.request(r.method, r.scheme + "://" + r.host + r.uri, headers=r.headers, data=r.body)
      print(resp.status_code, resp.reason)
      print(resp.content)
      
    2. 当请求体为图片格式
      1
      2
      3
      resp = requests.request(r.method, r.scheme + "://" + r.host + r.uri, headers=r.headers, data={}, files=files)
      print(resp.status_code, resp.reason)
      print(resp.content)
      
分享:

    相关文档

    相关产品