[英]Apache jClouds - Can we use authentication keystone v3 with application_credential?
jClouds是否支持application_credential kesytone V3?
我正在使用 OpenStack,我想使用jClouds 2.2.1 ( https://specs.openstack.org/openstack/keystone-specs/specs/keystone/queens/application-credentials.html ) 的應用程序憑據身份驗證。
Keystone 模塊有一個名為application_credential
的 auth 方法。 以下是 application_credential 的 POST 請求示例:
$ curl -i -H "Content-Type: application/json" -d \
'{
"auth": {
"identity": {
"methods": [
"application_credential"
],
"application_credential": {
"id": "50916383859f4d2f919c86315ffa17ba",
"secret": "demo"
}
}
}
}' \
"http://192.168.190.1:5000/v3/auth/tokens"
使用 Java,我有代碼:
Properties overrides = new Properties();
overrides.put(KeystoneProperties.KEYSTONE_VERSION, "3");
overrides.put(KeystoneProperties.CREDENTIAL_TYPE,
CredentialTypes.API_ACCESS_KEY_CREDENTIALS);
String accessKey = "accessKey";
String accessSecret = "accessSecret";
KeystoneApi keystone = ContextBuilder.newBuilder("openstack-keystone-3")
.endpoint("https://keystone.domain/v3")
.credentials(accessKey, accessSecret)
.overrides(overrides)
.modules(ImmutableSet.of(new SLF4JLoggingModule(),
new OkHttpCommandExecutorServiceModule()))
.buildApi(KeystoneApi.class);
keystone.getProjectApi().list();
它拋出一個異常:
lException in thread "main" java.lang.IllegalStateException: Optional.get() cannot be called on an absent value
at com.google.common.base.Absent.get(Absent.java:47)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:227)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137)
at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189)
at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45)
at org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156)
at org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123)
at com.sun.proxy.$Proxy52.authenticateAccessKey(Unknown Source)
at org.jclouds.openstack.keystone.auth.functions.AuthenticateApiAccessKeyCredentials.authenticate(AuthenticateApiAccessKeyCredentials.java:48)
at org.jclouds.openstack.keystone.auth.functions.BaseAuthenticator.apply(BaseAuthenticator.java:99)
at org.jclouds.openstack.keystone.auth.functions.BaseAuthenticator.apply(BaseAuthenticator.java:40)
at com.google.common.cache.CacheLoader$FunctionToCacheLoader.load(CacheLoader.java:151)
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527)
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2319)
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2282)
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2197)
at com.google.common.cache.LocalCache.get(LocalCache.java:3937)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830)
at org.jclouds.openstack.keystone.auth.config.AuthenticationModule$2.get(AuthenticationModule.java:138)
at org.jclouds.openstack.keystone.auth.config.AuthenticationModule$2.get(AuthenticationModule.java:135)
at org.jclouds.openstack.keystone.v3.catalog.V3ServiceCatalog.get(V3ServiceCatalog.java:50)
at org.jclouds.openstack.keystone.v3.catalog.V3ServiceCatalog.get(V3ServiceCatalog.java:35)
at org.jclouds.openstack.keystone.catalog.suppliers.LocationIdToURIFromServiceEndpointsForTypeAndVersion.get(LocationIdToURIFromServiceEndpointsForTypeAndVersion.java:76)
at org.jclouds.openstack.keystone.catalog.suppliers.LocationIdToURIFromServiceEndpointsForTypeAndVersion.get(LocationIdToURIFromServiceEndpointsForTypeAndVersion.java:46)
at org.jclouds.util.Suppliers2$1.get(Suppliers2.java:35)
at org.jclouds.util.Suppliers2$5.get(Suppliers2.java:110)
at org.jclouds.util.Suppliers2$5.get(Suppliers2.java:110)
at org.jclouds.util.Suppliers2$4.get(Suppliers2.java:86)
at org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointFor(RestAnnotationProcessor.java:562)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:204)
at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137)
at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:189)
at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:85)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74)
at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45)
at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
at com.sun.proxy.$Proxy56.list(Unknown Source)
at com.docaposte.ese.document.manager.service.config.JCloudsSwift.main(JCloudsSwift.java:57)
Process finished with exit code 1
先感謝您。
你還有 [https://jclouds.apache.org/guides/openstack/][1]
因為它不起作用,也許我錯過了一些東西 [1]: https://jclouds.apache.org/guides/openstack/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.