我很难使用OpenStack4j库(版本3.1.0)从外部Java应用程序向IBM Cloud中的对象存储服务进行身份验证。这是我的尝试方式:
Identifier domainIdentifier = Identifier.byName("DOMAIN");
Identifier projectIdentifier= Identifier.byName("PROJECT");
OSClient.OSClientV3 os = OSFactory.builderV3()
.endpoint("https://identity.open.softlayer.com/v3")
.credentials("USER", "PASS")
.scopeToProject(projectIdentifier, domainIdentifier)
.authenticate();
参考文献:
https://github.com/acloudfan/IBM-Object-Storage-Sample/
https://github.com/ibm-bluemix-mobile-services/bluemix-objectstorage-sample-liberty
问题似乎是我无法弄清楚从何处获得上述的DOMAIN和PROJECT信息,以及端点。该文档说要从“服务凭据”和“查看凭据”下的“对象存储”页面获取它们。我确实看到了具有以下字段的JSON输出:
{
"apikey": "...",
"endpoints": "...",
"iam_apikey_description": "...",
"iam_apikey_name": "...",
"iam_role_crn": "...",
"iam_serviceid_crn": "...",
"resource_instance_id": "..."
}
至少从名称上看,它们似乎都与领域或项目信息无关。我什至用对象存储连接器创建了一个单独的Web应用程序,并尝试从“环境变量”页面中获取信息,如某些文档所建议的那样,但是没有运气。
我最终要实现的目标是能够将文件摄取到我创建的容器中,并首先使用数据和分析服务(数据科学经验)。
最佳答案
造成混淆的原因是,Bluemix上存在(或曾经是)两种不同的对象存储服务(对象存储和云对象存储)。 bluemix-mobile-services SDK是为对象存储(而不是您已提供的服务)编写的。
“应用程序服务”页面上有一个入门工具包,可轻松获取入门代码并为Liberty项目设置工具链:
这具有凭据的域字段。 (这是入门工具包的链接,我添加了对象存储服务,该服务注入了凭据:https://console.bluemix.net/developer/appservice/starter-kits。或者,您可以仅使用该服务创建项目,而无需使用代码:https://console.bluemix.net/developer/appservice/create-project?services=Object-Storage。)
如果您想使用该服务,则这里是Java SDK for Cloud Object Storage的文档:
https://console.bluemix.net/docs/services/cloud-object-storage/libraries/java.html#java
这是对象存储服务的比较:
https://console.bluemix.net/catalog/infrastructure/object-storage-group