node.js - IBM Cloud Object Storage nodejs 认证
问题描述
我正在尝试通过 nodejs 连接到我的云对象存储(进入 node-red)。我不想使用现有的 SDK。为简单起见,我将在这个问题中使用 postman/curl。此外,以下请求应列出我所有的存储桶。
这是我当前的 curl 等效请求(由邮递员创建)
GET / HTTP/1.1
Host: s3.us-south.cloud-object-storage.appdomain.cloud
ibm-service-instance-id: MY INSTANCE ID
Content-Type: text/plain
Authorization: Bearer MYTOKEN
User-Agent: PostmanRuntime/7.13.0
Accept: */*
Cache-Control: no-cache
Postman-Token: POSTMAN TOKEN
Host: s3.us-south.cloud-object-storage.appdomain.cloud
accept-encoding: gzip, deflate
Connection: keep-alive
cache-control: no-cache
但这会返回:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<Resource></Resource>
<RequestId>REQ ID</RequestId>
<httpStatusCode>403</httpStatusCode>
</Error>
有什么我想念的吗?我指的是这个文档: https ://cloud.ibm.com/docs/services/cloud-object-storage/cli?topic=cloud-object-storage-compatibility-api-bucket-operations#compatibility-api-list - 桶
解决方案
您需要获取 API 身份验证令牌。为此,您需要已经获得的 API 密钥。请参阅此处了解如何请求 IAM 访问令牌。基本上:
curl -X "POST" "https://iam.cloud.ibm.com/identity/token" \
-H 'Accept: application/json' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode "apikey={api-key}" \
--data-urlencode "response_type=cloud_iam" \
--data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey"
推荐阅读
- android - Val cannot be reassigned 错误,即使我已经将其更改为 Var Kotlin
- ruby - 如何在ruby中的方法之外使用var?
- python - 添加新代码块后,discord.py bot 停止响应
- android - 如何在本机反应中获得实时地理位置
- xml - 复制的 XPath 返回空结果?
- python - 在 Sublime Text 中,有没有办法让 Jinja2 包自动为扩展名为 .html 的文件提供语法支持?
- vb.net - 仅删除文本文档上的某些内容 (VB.NET 4.8)
- javascript - 仅在html表中合并具有相同第一列值的行
- html - 使用 "display: flex" 将头像放置在换行的评论旁边
- yaml - MongoDB Error parsing YAML Config 副本集的非法映射值