【API进阶之路6】一个技术盲点,差点让整个项目翻车
上次教了实习生一个方案之后,这小子跟运营妹子的关系是越走越近,时不时地撒把狗粮,在我司真正实现了研发运营一家亲~(上回你没看?戳上文剧情回顾:万万没想到,一个技术方案帮实习生追到了运营妹子)
这回想跟大家聊的,是最近一个可以说有些惊心动魄的项目。自从我开始在华为云网站自学API的技术解决方案之后,我就变成了公司的云服务器技术专家,老板或运维部门想要查询个数据什么的都来找我。
近期有一个运营项目的系统正在开发中,运营方规划了一个数据BI模板,列出了需要监测和分析的数据维度,老板干脆让我每周出一份数据报表来支持各方的数据获取和数据分析。
让研发出数据报表?这不是逼着李逵绣花么?但是,我能轻易拒绝吗?前几回高光时刻带来的成就感和光环还没褪去呢,不能怂!于是我提了一个方案:可以把云服务器的监控仪表内嵌到我们自己的系统里,这样大家可以随时查询,也方便。
老板听了这个方案表示很开心,并同意加入到项目排期中,数据查询功能与系统同期上线,以便及时跟踪运营结果。在老板的笑容里,我看到季度奖金在向我招手。
说干就干,执行力咱还是有的。用1天的时间就把程序写完了,在测试的时候发现了一个问题,数据过不来!因为通过内嵌系统登陆云服务器需要经过各种认证,步骤多不说,如果要想实现人人可查询还存在泄密的危险。
这可怎么办,系统上线的日期临近,不能因为我这部分影响到项目进展啊!当初拍着胸脯提(chui)的方(niu)案(13),难道就要失败了?
不行,再查查!我专门联系了华为云的技术专家,得知可以通过IAM自定义代理免密登录到云服务Console页面,省去认证环节,直接登陆云服务器进行数据查询和获取。
那怎么做免密登录呢?他给了我一份文档,内容是这样的:
一、前提条件
步骤 1:创建账号I**mainA下的IAM用户userB,并授予Security Administrator和Agent Operator权限(全局服务-全局项目)。
将userB的用户名和密码配置到企业系统的配置文件中,密码建议加密存储,以便获取认证token并进一步调用IAM其他Open API。
备注:有关创建IAM用户和授权相关操作请参见:创建IAM用户(https://support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046611303.html) 和 创建用户组并授权 (https://support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046611269.html)
步骤2:创建联邦代理所需委托IAMAgency。
委托类型选择“普通账号”,委托的账号填写“DomainA”。
备注:有关创建委托相关操作请参见:创建委托(委托方操作)(https://support.huaweicloud.com/usermanual-iam/zh-cn_topic_0046613147.html)
二、华为云联邦代理登录
步骤1:调用IAM API获取STS token
1)使用IAM全局域名(iam.myhuaweicloud.com)调用IAM服务的API(POST /v3.0/OS-CREDENTIAL/securitytokens)获取STS token。
填写"session_user"参数,发起一个POST请求。
POST https://iam.myhuaweicloud.com/v3.0/OS-CREDENTIAL/securitytokens
请求示例
[code]{ "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
响应示例
[code]<br style="">
[code]{ "credential": { "access": "E6DX0TF2ZREQ4ZAVM5CS", "expires_at": "2020-01-08T02:56:19.587000Z", "secret": "w9ePum0qdfac39ErLD0UdjofYkqort6Iw2bmR6Si", "securitytoken": "gQpjbi1ub3J0aC0..." } }
步骤2:调用IAM API获取logintoken
1)使用IAM全局域名(iam.myhuaweicloud.com)调用IAM服务的API(POST /v3.0/OS-AUTH/securitytoken/logintokens)获取logintoken。
发送一个POST请求。
POST https://iam.myhuaweicloud.com/v3.0/OS-AUTH/securitytoken/logintokens
请求示例
[code]{ "auth": { "securitytoken": { "access": "LUJHNN4WB569PGAPBDFT", "id": "gQpjbi1ub3J0a...", "secret": "7qtrm2cku0XubixiVkBOcvMfpnu7H2mLNCUsuFR8" } } }
2)获取请求响应头中的X-Subject-LoginToken信息。
通过委托获取临时访问密钥和securitytoken且请求体中填写session_user.name参数。
返回示例
[code]{ "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:构建联邦代理登录地址,完成免密登录
联邦代理登录地址的构建规则为:
构建参数说明:
l {target_console_url}为目的云服务console地址的urlencode编码结果。
l {logintoken}为步骤2中获取到的logintoken的urlencode编码结果。
l {enterprise_system_loginURL}是选填参数,为企业客户自身的登录系统地址的urlencode编码结果。
按照文档的指引,我最终顺利解决了这个问题,项目如期上线,运营方也可以通过免密登陆自己查询和分析运营数据,及时作出优化调整,省时省事还安全。在月度例会上,我因此再一次得到了老板的肯定,开心的同时,也在心里暗想:“看来不能松懈,还得多学习啊~”
据了解,目前API Explorer平台已开放EI企业智能、计算、应用服务、网络、软件开发平台、视频等70+云服务,共上线2000+个API、6000+个错误码。在前期试运行期间,华为云API Explorer平台上的API接口也已被多家企业成功接入。
点击查看详情:《华为云新功能上线,体验还能拿码豆》
华为云API Explorer平台在未来几个月会实现更多功能,比如支持SDK示例代码、CLI等特性,同时也会开放更多的云服务API接口,连接更多开发者实现创新、拓宽创新边界。
点击这里→了解更多精彩内容
相关推荐
- 【API进阶之路6】一个技术盲点,差点让整个项目翻车
- 单例 实现 一个变量为 整个项目都可以用
- 去年5月份,公司项目较少,我就组织了一个用于公司内部办公管理的项目(以下称OA)。第一个目的是为了让公司里面一些技术较差的人员得到真正编程的锻炼;第二个目的是为了使用空闲的人员为公司开发一个产品,在内
- 十年风雨,一个普通程序员的成长之路(八)不想做技术总监的项目经理,不是好程序员...
- 由一个虚构的例子谈谈中小型研发型项目的技术管理及成本控制(全文)
- VS2005发布网站项目时整个站点生成为一个自定义名称的dll文件
- 一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目
- ajax实现省级联动以及网站项目中通过写一个过滤器全局配置解觉整个网站的乱码问题
- 杂谈:一个小型WebMap项目的架构和技术实现(GmapAPI+jQuery+XML)
- 怎么查看真实项目的http 请求的请求报文和响应报文,即request和response?只有这样,才能完全彻底明白一个http 请求整个过程,发送和接收的是什么东西。
- 一个基于DDD的开源项目,各种技术!
- Eclipse中在android项目中出现新建一个Activity后,出现整个project的报错以及包导入以后无法执行等等情况分析。
- S1.1_Struts2_Model2 手动创建一个简单的servlet项目,未使用Struts技术
- Java将整个文件夹里的文本中的字符串替换成另外一个字符串(可用于项目复制,变成另一个项目)
- 本人在一个项目开发中所使用的框架和技术
- 一个项目掌握80%的企业级项目开发技术
- VS2005发布网站项目时整个站点生成为一个自定义名称的dll文件
- 一个完整的Web项目大体要用到的技术
- 一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目 http://www.devtf.cn
- 一个完整的Java Web项目需要掌握哪些技术