常见问题
子用户是否需要进行实名认证?
子用户无需进行实名认证,我们认为子用户是主账号下的员工或程序,具有主账号赋予的某些权限
子用户登录入口在哪里?
子用户登录与主账号登录共用一个页面,通过点击页面链接""切换。如图:
子用户采购云产品需要什么权限?
Access KEY的正确使用方式是什么,SK密钥丢失了怎么办?
适用场景
开发者应用访问浪潮云的OpenAPI时,需要使用由浪潮云颁发的SECRET KEY对请求进行签名。并携带签名信息发起请求。这个调用不应该在浏览器端,因为SECRET KEY不可能保存在浏览器端。
开发者需要将请求中的所有内容,包括请求uri、请求Body体、请求方式、请求头(header)及请求参数等信息,按照一定的顺序组装。使用指定的加密算法计算得出签名值signatrue。并携带此签名作为身份凭证访问浪潮云资源。
使用方式
步骤一
构建标准请求url签名字符串:
- 参数排序。以参数字母顺序排序,排序参数包括Query查询参数和Form表单参数。
- 获取请求uri,即url绝对路径部分。
- 将排序后的参数列表按照uri?key1=value1&key2=value2的方式拼接,得到url签名参数(uriToSign) 例如: 原始请求url为:
http://浪潮云/auth/v1/policies/testPolicyId?name=policy1&description=策略1
则按照步骤一得到的结果为:
/auth/v1/policies/testPolicyId?description=策略1&name=policy1
步骤二
构建header签名字符串: 生成13位毫秒级时间戳x-time,生成一组随机字符串x-random
将x-time、x-random、SECRET KEY(注意,不是ACCESS KEY。由浪潮云颁发)按照x-time+x-random+SECRET KEY 顺序直接拼接得到header签名参数(headerToSign)
步骤三
对请求body体字符串进行MD5加密运算,并转换为16进制,得出bodyToSign
例如,有请求body如下:
[{"action":"CreateEip", "context":{}, "region":"cn-north-3", "resourceType":"instance", "resourceAccountId":"", "instanceId": null, "resourceCreator":"", "service":"eip" }]
对其进行MD5加密,并转换为16进制后,得到
09ad60b0ed0e428af0fd3dd937ef5f49
步骤四
将httpMethod(本次请求方式,如GET、POST等)、headerToSign、uriToSign、bodyToSign,以换行符“\n”为分隔拼接。得到最终签名的字符串(fullToSign)。 例如: 原始请求为:
GET https://浪潮云/auth/v1/policies/testPolicyId?name=policy1&description=策略1
x-time: 1566789683802
x-random: f81c2640d4ed48cc8049e48f5833e163
x-secret-id: YTQxMGI1NWYtMTViOC00ODk2LThhZjUtZWJjZjA4OGUyMTMx
x-sign-algorithm: MD5
SECRET KEY为YzkxZjc4YWEtZDUzYi00MzQ1LWI0YTItZGY2OTkyNTcxNmM2
则最终得到的签名字符串(fullToSign)为:
GET
1566789683802f81c2640d4ed48cc8049e48f5833e163YzkxZjc4YWEtZDUzYi00MzQ1LWI0YTItZGY2OTkyNTcxNmM2
/auth/v1/policies/testPolicyId?description=策略1&name=policy1
步骤五
按照x-sign-algorithm参数的算法对fullToSign进行加密运算,并转换为16进制,再对结果进行base64编码后,得到最终的签名值signatrue。参考java示例代码如下:
signToBase64 = DigestUtils.md5Hex(fullToSign.getBytes())
signature = new String(Base64.encodeBase64(signToBase64.getBytes()), "UTF-8");
将signatrue以x-sign为键带入请求header中,发起请求,请求头中必须包含如下信息:
键 | 含义 |
---|---|
x-sign-algorithm | 哈希算法,支持sha1、md5、sha256 |
x-secret-id | Access Key |
x-time | 13位毫秒级时间戳 |
x-random | 随机字符串 |
x-sign | 签名运算后得到的签名值signatrue |
POST请求示例
现有post请求如下:
curl -X POST \
https://浪潮云/auth/v1/has-permissions \
-d '[{"action":"CreateEip", "context":{}, "region":"cn-north-3", "resourceType":"instance", "resourceAccountId":"", "instanceId": null, "resourceCreator":"", "service":"eip" }]'
按照步骤一操作得到uriToSign:
/auth/v1/has-permissions
按照步骤二操作得到headerToSign:
声明随机数x-random:da3df059255345b5b07e23601109f5e7
当前时间戳x-time:1573722631879
浪潮云颁发的SK:NmNmNzhmNGItNzczMi00ODJhLTkwNmEtYWExMWQ4NmI0NjA0
拼接得到
1573722631879da3df059255345b5b07e23601109f5e7NmNmNzhmNGItNzczMi00ODJhLTkwNmEtYWExMWQ4NmI0NjA0
按照步骤三操作得到bodyToSign:
09ad60b0ed0e428af0fd3dd937ef5f49
按照步骤四操作得到fullToSign:
POST
1573722631879da3df059255345b5b07e23601109f5e7NmNmNzhmNGItNzczMi00ODJhLTkwNmEtYWExMWQ4NmI0NjA0
/auth/v1/has-permissions
09ad60b0ed0e428af0fd3dd937ef5f49
按照步骤五操作得到signatrue:
YzdhMWI4NjBmNzRlNjI1NjAzOGE3Yzg4NTM0MzYxMTM=
最后,将x-random、x-time、signatrue以x-sign为键、AK以x-secret-id为键,x-sign-algorithm(签名加密算法,本例选择MD5)放入header中发起请求。最终请求信息如下:
curl -X POST \
https://浪潮云/auth/v1/has-permissions \
-H 'x-random: da3df059255345b5b07e23601109f5e7' \
-H 'x-secret-id: N2QxZWYxMzMtMjY1MS00NGE4LWFhMTMtNjVjOGMyODgyNDk0' \
-H 'x-time: 1573722631879' \
-H 'x-sign-algorithm: MD5' \
-H 'x-sign: YzdhMWI4NjBmNzRlNjI1NjAzOGE3Yzg4NTM0MzYxMTM=' \
-d '[{"action":"CreateEip", "context":{}, "region":"cn-north-3", "resourceType":"instance", "resourceAccountId":"", "instanceId": null, "resourceCreator":"", "service":"eip" }]'
SK密钥丢失
Access Key由浪潮云颁发给访问者。丢失后无法找回,只能通过控制台删除已有密钥再新增。请妥善保存。
如何为子用户授权?
在控制台策略管理>自定义策略>创建自定义策略,创建相关资源权限的策略(详见操作指南>策略管理>创建自定义策略)。
然后在策略管理>自定义策略,列表中关联用户(详见操作指南>策略管理>关联用户);或在人员管理>用户管理中为用户授权(详见操作指南>人员管理>为用户授权)