操作场景
本文档介绍如何通过角色身份免密登录控制台功能实现的详细流程。比较典型的场景为:当您配置完成腾讯云日志服务采集和查询分析等功能后,期望不需要登录腾讯云日志服务控制台即可直接获取到日志服务的分析内容,通过本文档进行配置后可在第三方站点登录使用腾讯云内嵌控制台页面。
操作指南
前提条件
1. 您需要创建一个角色载体为账号的角色,且允许其登录控制台。本文档里该角色假设命名为 MyRole。创建角色请参阅 创建角色 - API 文档。
2. 获取当前用户的访问密钥。如何获取持久密钥,可参阅 当前用户的访问密钥 。
操作步骤
注意
设置中可能存在以下风险,请参考安全意见进行操作:
临时密钥有效期请勿设置过长,建议设置在 5 分钟以内,可通过 AssumeRole 参数 DurationSeconds 指定。
包含参数的完整登录地址(
https://cloud.tencent.com/login/roleAccessCallback?algorithm...
)请勿暴露在公网。用户侧用于生成登录地址的系统需设置鉴权,例如内网身份校验,请勿设置成公开权限访问。
1. 用户使用前提条件 2 中获取到的访问密钥调用 AssumeRole 接口,申请前提条件 1 中预先被创建好的角色 MyRole 的临时密钥。
2. 用户调用 AssumeRole 接口成功后,获取到角色 MyRole 的临时密钥。
3. 用户通过该角色的临时密钥生成登录签名信息。详细可参考以下步骤:
3.1 参数排序:对要求签名的参数按照字母表或数字表递增顺序的排序,先考虑第一个字母,在相同的情况下考虑第二个字母,以此类推。您可以借助编程语言中的相关排序函数来实现这一功能,如 PHP中 的 ksort 函数。其中签名参数包含以下内容:
参数名称 | 必选 | 类型 | 描述 |
action | 是 | String | 操作动作,固定为 roleLogin |
timestamp | 是 | Int | 当前时间戳 |
nonce | 是 | Int | 随机整数,取值 10000-100000000 |
secretId | 是 | String | STS 返回的临时 AK |
3.2 拼接参数:将把上一步排序好的请求参数,按“参数名称=参数值”拼接,例如:
action=roleLogin&nonce=67439&secretId=AKI***PLE×tamp=1484793352
3.3 拼接签名串:按
请求方法 + 请求主机 +请求路径 + ? + 请求字符串
的规则拼接签名串。参数 | 必选 | 描述 |
请求主机和路径 | 是 | 固定为 cloud.tencent.com/login/roleAccessCallback |
请求方法 | 是 | 支持 GET 或 POST |
签名串示例:
GETcloud.tencent.com/login/roleAccessCallback?action=roleLogin&nonce=67439&secretId=AKI***PLE×tamp=1484793352
3.4 生成签名串:使用 HMAC-SHA1 算法对字符串签名,目前支持 HMAC-SHA1 和 HMAC-SHA256。具体代码如下,以 PHP 语言为例:
<?php$secretKey = 'Gu5***1qA';$srcStr = 'GETcloud.tencent.com/login/roleAccessCallback?action=roleLogin&nonce=67439&secretId=×tamp=1484793352';$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));echo $signStr;?>
PHP版本示例代码:
<?php$secretId = "AKI***"; //STS返回的临时AK$secretKey = "Gu5***PLE"; //STS返回的临时Secret$token = "ADE***fds"; //STS返回的安全TOKEN$param["nonce"] = 11886; //rand();$param["timestamp"] = 1465185768; //time();$param["secretId"] = $secretId;$param["action"] = "roleLogin";ksort($param);$signStr = "GETcloud.tencent.com/login/roleAccessCallback?";foreach ( $param as $key => $value ) {$signStr = $signStr . $key . "=" . $value . "&";}$signStr = substr($signStr, 0, -1);$signature = base64_encode(hash_hmac("sha1", $signStr, $secretKey, true));echo $signature.PHP_EOL;
4. 拼接完整登录信息以及目的页地址进行登录,参数值需要 urlencode 编码。
https://cloud.tencent.com/login/roleAccessCallback?algorithm=<签名时加密算法,目前只支持sha1和sha256 ,不填默认sha1>&secretId=<签名时secretId>&token=<临时密钥token>&nonce=<签名时nonce>×tamp=<签名时timestamp>&signature=<签名串>&s_url=<登录后目的URL>
5. 腾讯云登录服务验证登录信息正确后,重定向至腾讯云目的页。