认证鉴权-j9九游会登录
appstage调用接口支持ak/sk、api key或token认证鉴权。
- ak/sk认证:通过ak(access key id)/sk(secret access key)进行api调用时的认证。
- api key认证:通过api密钥进行api调用时的认证。
- token认证:通过token认证调用请求。
ak/sk认证
ak/sk认证就是使用ak/sk对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。
- ak(access key id):访问密钥id。与私有访问密钥关联的唯一标识符;访问密钥id和私有访问密钥一起使用,对请求进行加密签名。
- sk(secret access key):与访问密钥id结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。
使用ak/sk认证时,您可以基于签名算法使用ak/sk对请求进行签名。详细的签名认证操作流程如下。
- ak/sk申请
使用具有管理员权限(admin)账号登录到ai原生应用引擎,从凭证管理进入到ak/sk访问密钥页面,新建ak/sk。
每个用户只能同时拥有两个ak/sk凭证。
- ak/sk下载
成功创建ak/sk后,会立刻弹出ak/sk凭证下载弹窗,下载后得到凭证文件。
每个凭证仅能下载一次,且无法找回,请妥善保管凭证文件。
- 使用ak/sk鉴权
在请求头里添加如下header:
ts: 毫秒时间戳
nonce: 请求唯一标识(uuid)
ak: 凭证文件中的ak明文
resource-code: wiseagent对外开放接口对应的唯一编码,每个接口唯一
sign: 按如下规则拼接字符串"ts={变量名}&nonce={nonce}&ak={ak}",对拼接得到的字符串plain进行sha256散列后得到散列值hash,再使用凭证中的sk明文对刚才生产的hash进行再散列,最后进行base64转码,得到签名字符串。
签名样例代码(java):
public string sha256(string plain) { try { messagedigest messagedigest = messagedigest.getinstance("sha-256"); messagedigest.update(plain.getbytes(standardcharsets.utf_8)); byte[] bytes = messagedigest.digest(); stringbuffer hexbuffer = new stringbuffer(); for (byte abyte : bytes) { string hex = integer.tohexstring(0xff & abyte); if (hex.length() == 1) { hexbuffer.append('0'); } hexbuffer.append(hex); } return hexbuffer.tostring(); } catch (nosuchalgorithmexception ignore) { } } public string hmacsha256(string hash, string sk) { try { mac hmacsha256 = mac.getinstance("hmacsha256"); secretkeyspec secretkeyspec = new secretkeyspec(sk.getbytes(standardcharsets.utf_8), "hmacsha256"); hmacsha256.init(secretkeyspec); byte[] bytes = hmacsha256.dofinal(hash.getbytes(standardcharsets.utf_8)); return base64.encodebase64string(bytes); } catch (nosuchalgorithmexception | invalidkeyexception ignore) { } }
api key认证
api key全称为应用程序接口密钥,是一种用于验证和授权api请求的代码。它通常是一串字符,用于识别调用api的应用程序和开发者。
- 获取api key
以管理员身份登录ai原生应用引擎工作台,参考创建api key获取。
- 使用api key鉴权
调用时,在请求头里新增字段authorization,值填写为bearer ${api key},拼接起来如下所示。
authorization:bearer sk-5db9*********dd58
token认证
- token的有效期为24小时,需要使用一个token鉴权时,可以先缓存起来,避免频繁调用。
- 使用token前请确保token离过期有足够的时间,防止调用api的过程中token过期导致调用api失败。
token在计算机系统中代表令牌(临时)的意思,拥有token就代表拥有某种权限。token认证就是在调用api的时候将token加到请求消息头,从而通过身份认证,获得操作api的权限。
token可通过调用获取用户token接口获取,调用本服务api需要project级别的token,即调用获取用户token接口时,请求body中auth.scope的取值需要选择project,如下所示。
{
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"name": "username",
"password": "********",
"domain": {
"name": "domainname"
}
}
}
},
"scope": {
"project": {
"name": "xxxxxxxx"
}
}
}
}
获取token后,再调用其他接口时,您需要在请求消息头中添加“x-auth-token”,其值即为获取到的token。例如token值为“abcdefg....”,则调用接口时将“x-auth-token: abcdefg....”加到请求消息头即可,如下所示。
post https://iam.cn-north-4.myhuaweicloud.com/v3.0/os-user/users
content-type: application/json
x-auth-token: abcdefg....
您还可以通过这个视频教程了解如何使用token认证: 。
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨