NodeJS 方式搭建腾讯云 STS 临时密钥服务端
搭建服务端
场景:需要在移动端平台通过 API 上传、查看 COS 上的内容,调用API时需要密钥验证,因此先在本地搭建测试一下功能是否完好。
理由:如果将固定密钥配置到代码内,有泄漏风险。使用临时密钥+子用户可以更好的处理权限控制问题,因为COS有着丰富的权限控制功能。
流程图:
官网的仓库:
1 |
|
拉取代码到本地(我的是CVM)后,可以查看NodeJS目录中的demo使用的是Express框架,因此这里全局安装一下Express及其所需的包,先更新下npm
1 |
|
修改sts-server.js
的参数,主要是下面几点。建议开一个子用户专门给COS使用,不要用主账号的ID 和Key
1 |
|
调整完了就OK 了,sts-server-scope.js
不用管它,启动服务,如果是云服务器记得在安全组策略开对应的端口。
1 |
|
然后 IP + PORT访问。
1 |
|
接着就会在页面返回一个对象,内容大概是这样的格式。若需的部分就是sessionToken
、tmpSecretId
、tmpSecretKey
这三个。
1 |
|
从COS签名工具获取签名串
在测试期间,在COS签名工具-计算签名处 来获取签名串。工具链接:https://cos5.cloud.tencent.com/static/cos-sign/
1 |
|
点击【生成签名】,右侧结果反馈里会生成一串内容
1 |
|
验证临时密钥有效性
将COS签名工具生成的签名串传入HTTP请求头中的Authorization
字段,将临时密钥返回的sessionToken
传入请求头的x-cos-security-token
字段,即可发起请求验证。
可以看到200的返回码,验证通过。
路径问题:
如果sts-server.js
中allowPrefix
字段设置的是clouds/Daily/*
,
那么在测试时,COS签名工具里HttpURI字段需要带上这些,例如:/clouds/Daily/2.jpg
,
然后在发起put请求时,也需要在末尾带上该部分
验证失败:
可根据错误提示,查看官方文档:https://cloud.tencent.com/document/product/436/54303#message-.E4.B8.BA-.E2.80.9Caccess-denied..E2.80.9D
本文参考官方文档搭建:https://cloud.tencent.com/developer/article/1675803
临时密钥生成及使用官方文档:https://cloud.tencent.com/document/product/436/14048