阿里云API网关提供多种针对客户端请求的安全认证方式,包括阿里云APP认证方式、Jwt插件、第三方鉴权等。对于阿里云APP这种认证方式,目前您可以设置两种认证形式,分别是签名认证和简单认证(AppCode),本文将详细介绍简单认证(AppCode)方式的使用。
注意事项
简单认证方式免去了复杂的签名过程,但是把AppCode
作为明文暴露网络中传输,会带来一些安全隐患,请务必重视。
客户端和API网关之间务必使用HTTPS进行通信,避免使用HTTP协议进行数据传输。因为简单认证方式,AppCode在传输过程中使用明文,而HTTP通信协议没有加密,一旦网络通信的网络包被黑客抓取,有非常大的丢失AppCode的风险。
概述
对于请求的签名认证方式,可参见签名认证方式调用API。
简单认证(AppCode)使用API网关颁发的
AppCode
进行身份认证,调用者将AppCode
放到请求头中,或者放到请求的Query
参数中进行身份认证,实现快速调用API
的能力。简单认证(AppCode)过程如下:创建简单认证(AppCode)方式的API。
创建一个App(颁发
AppCode
)。将创建的简单认证(AppCode)方式的API授权给App。
使用API网关颁发的
AppCode
进行身份认证。
创建简单认证(AppCode)API
登录API网关控制台,在左侧导航栏选择API管理 > 分组管理,在分组管理页面单击右上角创建分组。
在创建分组页面,选择实例为所创建的API网关实例,填写分组名称和BasePath,单击确定。
在左侧导航栏选择API管理 > API列表,在API列表页面的右上角单击创建API。
在创建API基本信息页面,选择已创建的分组,填写API名称,安全认证方式选择为阿里云APP,AppCode认证选择允许AppCode认证(Header)或允许AppCode认证(Header & Query)。
AppCode认证四个选项的说明如下:
选项
说明
上架云市场后开启
默认不开启,如果API上架云市场,则支持将AppCode放在Header中进行认证。
禁止AppCode认证
无论API是否上架云市场,都不开启,都需要使用签名方式调用。
允许AppCode认证(Header)
无论API是否上架云市场,都开启,但只支持将AppCode放在Header中进行认证。
允许AppCode认证(Header & Query)
无论API是否上架云市场,都开启,同时支持将AppCode放在Header中,或者将AppCode放在Query中进行认证。
选择签名算法,单击下一步。
进入定义API请求栏可参见定义API请求,然后单击下一步。
进入定义API后端服务可参见定义后端服务信息,单击保存。
定义API参数的时候,不需要定义携带
AppCode
的头或者Header
参数。API创建完成之后可以将API发布到环境中进行调试。
创建一个App
登录API网关控制台,左侧导航栏选择API调用 > 应用管理,在应用管理页面右上角单击创建APP。
在创建应用弹框中填写应用名称,单击确定。
已创建的App会自动生成一个
AppCode
,可在应用管理页面单击已创建的App应用名称进入应用详情页面找到。如果您是云市场用户,在云市场购买API时云市场会为您创建一个 App。
简单认证(AppCode)API授权给App
登录API网关控制台,在左侧导航栏选择API管理 > API列表,在API列表页面选择已创建的API名称操作列下的,单击授权。
在授权页面选择要授权的环境,授权有效时间,选择要授权的应用。在我的应用,直接单击搜索,会加载本账号下的APP,单击添加选中并确定。
使用AppCode身份认证
简单认证(AppCode)调用API,有两种方式,一种是将AppCode
放在Header
中进行调用,一种是将AppCode
放在Query
参数中进行调用。
方式一:将AppCode放在Header中
在请求
Header
中添加一个Authorization
参数。Authorization字段的值的格式为
APPCODE
+ 半角空格+APPCODE
值。格式如下:Authorization:APPCODE AppCode值
示例:
Authorization:APPCODE 3F2504E04F8911D39A0C0305E82C3301
重要当后端服务为HTTP函数时,Authorization不会透传到后端服务,会被HTTP函数的Authorization覆盖,建议将AppCode放在Query中。
方式二:将AppCode放在Query中
在请求
Query
中添加AppCode
参数(同时支持appcode
,appCode
,APPCODE
,APPCode
四种写法)。AppCode
参数的值为AppCode
的值。
示例:
http://www.aliyum.com?AppCode=3F2504E04F8911D39A0C0305E82C3301