【API进阶之路6】一个技术盲点,差点让整个项目翻车

上次教了实习生一个方案以后,这小子跟运营妹子的关系是越走越近,时不时地撒把狗粮,在我司真正实现了研发运营一家亲~(上回你没看?戳上文剧情回顾:万万没想到,一个技术方案帮实习生追到了运营妹子html

这回想跟你们聊的,是最近一个能够说有些惊心动魄的项目。自从我开始在华为云网站自学API的技术解决方案以后,我就变成了公司的云服务器技术专家,老板或运维部门想要查询个数据什么的都来找我。api

近期有一个运营项目的系统正在开发中,运营方规划了一个数据BI模板,列出了须要监测和分析的数据维度,老板干脆让我每周出一份数据报表来支持各方的数据获取和数据分析。安全

让研发出数据报表?这不是逼着李逵绣花么?可是,我能轻易拒绝吗?前几次高光时刻带来的成就感和光环还没褪去呢,不能怂!因而我提了一个方案:能够把云服务器的监控仪表内嵌到咱们本身的系统里,这样你们能够随时查询,也方便。bash

老板听了这个方案表示很开心,并赞成加入到项目排期中,数据查询功能与系统同期上线,以便及时跟踪运营结果。在老板的笑容里,我看到季度奖金在向我招手。服务器

说干就干,执行力咱仍是有的。用1天的时间就把程序写完了,在测试的时候发现了一个问题,数据过不来!由于经过内嵌系统登录云服务器须要通过各类认证,步骤多不说,若是要想实现人人可查询还存在泄密的危险。网络

这可怎么办,系统上线的日期临近,不能由于我这部分影响到项目进展啊!当初拍着胸脯提(chui)的方(niu)案(13),难道就要失败了?session

不行,再查查!我专门联系了华为云的技术专家,得知能够经过IAM自定义代理免密登陆到云服务Console页面,省去认证环节,直接登录云服务器进行数据查询和获取。运维

那怎么作免密登陆呢?他给了我一份文档,内容是这样的:dom

1、前提条件

步骤 1:建立帐号I**mainA下的IAM用户userB,并授予Security Administrator和Agent Operator权限(全局服务-全局项目)。

将userB的用户名和密码配置到企业系统的配置文件中,密码建议加密存储,以便获取认证token并进一步调用IAM其余Open API。ide

配图1.png

备注:有关建立IAM用户和受权相关操做请参见:建立IAM用户support.huaweicloud.com/usermanual-…) 和 建立用户组并受权support.huaweicloud.com/usermanual-…

步骤2:建立联邦代理所需委托IAMAgency。

委托类型选择“普通帐号”,委托的帐号填写“DomainA”。

配图2.png


备注:有关建立委托相关操做请参见:建立委托(委托方操做)support.huaweicloud.com/usermanual-…

2、华为云联邦代理登陆

步骤1:调用IAM API获取STS token

1)使用IAM全局域名(iam.myhuaweicloud.com)调用IAM服务的API(POST /v3.0/OS-CREDENTIAL/securitytokens)获取STS token。

填写"session_user"参数,发起一个POST请求。

POST iam.myhuaweicloud.com/v3.0/OS-CRE…

请求示例

{
 "auth": {
 "identity": {
 "assume_role": {
 "agency_name": "IAMAgency",
 "domain_name": "I**mainA",
 "duration-seconds": 3600,
 "session_user": {
 "name": "SessionUserName"
 }
 },
 "methods": [
 "assume_role"
 ]
 }
 }
} 复制代码

2)获取并记录请求响应体中的STS token信息:credential.access , credential.secret, credential.securitytoken

响应示例

<br style=""> 复制代码


{ 
 "credential": {
 "access": "E6DX0TF2ZREQ4ZAVM5CS",
 "expires_at": "2020-01-08T02:56:19.587000Z",
 "secret": "w9ePum0qdfac39ErLD0UdjofYkqort6Iw2bmR6Si",
 "securitytoken": "gQpjbi1ub3J0aC0..."
 }
} 复制代码

发送一个POST请求。

步骤2:调用IAM API获取logintoken

1)使用IAM全局域名(iam.myhuaweicloud.com)调用IAM服务的API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取logintoken。

POST iam.myhuaweicloud.com/v3.0/OS-AUT…

请求示例

{
 "auth": {
 "securitytoken": {
 "access": "LUJHNN4WB569PGAPBDFT",
 "id": "gQpjbi1ub3J0a...",
 "secret": "7qtrm2cku0XubixiVkBOcvMfpnu7H2mLNCUsuFR8"
 }
 }
} 复制代码

2)获取请求响应头中的X-Subject-LoginToken信息。

经过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数。

返回示例

{
 "logintoken": {
 "assumed_by": {
 "user": {
 "domain": {
 "id": "0659ef9c9c80d4560f14c009acf9c4a0",
 "name": "I**mainB"
 },
 "id": "0659ef9d4d00d3b81f26c009fee32b57",
 "name": "IAMUserB",
 "password_expires_at": "2020-02-16T02:44:57.000000Z"
 }
 },
 "domain_id": "05262121fb00d5c30fbec013bc17a4a0",
 "expires_at": "2020-01-23T03:27:26.728000Z",
 "method": "federation_proxy",
 "session_id": "0012c8e6adda4ce787e90585d10e3e63",
 "session_name": "SessionUserName",
 "user_id": "07826f367b80d2474ff9c013a48903ee",
 "user_name": "I**mainA/IAMAgency"
 }
} 复制代码


步骤3:构建联邦代理登陆地址,完成免密登陆

联邦代理登陆地址的构建规则为:

auth.huaweicloud.com/authui/fede…

构建参数说明:

  • {target_console_url}为目的云服务console地址的urlencode编码结果。
  • {logintoken}为步骤2中获取到的logintoken的urlencode编码结果。
  • {enterprise_system_loginURL}是选填参数,为企业客户自身的登陆系统地址的urlencode编码结果。

按照文档的指引,我最终顺利解决了这个问题,项目如期上线,运营方也能够经过免密登录本身查询和分析运营数据,及时做出优化调整,省时省事还安全。在月度例会上,我所以再一次获得了老板的确定,开心的同时,也在内心暗想:“看来不能松懈,还得多学习啊~”

据了解,目前API Explorer平台已开放EI企业智能、计算、应用服务、网络、软件开发平台、视频等70+云服务,共上线2000+个API、6000+个错误码。在前期试运行期间,华为云API Explorer平台上的API接口也已被多家企业成功接入。

点击查看详情:《华为云新功能上线,体验还能拿码豆》

华为云API Explorer平台在将来几个月会实现更多功能,好比支持SDK示例代码、CLI等特性,同时也会开放更多的云服务API接口,链接更多开发者实现创新、拓宽创新边界。


点击关注,第一时间了解华为云新鲜技术~

相关文章
相关标签/搜索