ContainX / openstack4j

A Fluent OpenStack SDK / Client Library for Java
http://openstack4j.com
Other
290 stars 368 forks source link

How can i get through v3 authentication? #506

Closed gugia closed 8 years ago

gugia commented 8 years ago

Always return AuthenticationException{message=Unauthorized, status=401} my code: Identifier domainIdentifier = Identifier.byName("defalut"); OSClient os = OSFactory.builderV3().endpoint("http://10.3.30.145:35357/v3") .credentials("demo", "demo", domainIdentifier).authenticate(); OP Dashboard: image

auhlig commented 8 years ago

Hey @gugia, What version of OpenStack4j are you using? When v3-authentication using the latest release (2.0.8) you will need to provide a project scope. In the future we'll be able to support full v3 authentication. We're already working on it.

This it how it works for now

with userName+password+domainId+projectScope

OSFactory.builderV3()
                .endpoint(authUrl)
                .credentials(userName, password, Identifier.byName(userDomainId))
                .scopeToProject(Identifier.byId(projectId), Identifier.byId(projectDomainId))
                .authenticate();

or with userId+password+projectScope

OSFactory.builderV3()
                .endpoint(authUrl)
                .credentials(userId, password)
                .scopeToProject(Identifier.byId(projectId), Identifier.byId(projectDomainId))
                .authenticate();

or with a token

OSFactory.builderV3()
                .endpoint(authUrl))
                .token(tokenId)
                .scopeToProject(Identifier.byId(projectId), Identifier.byId(projectDomainId))
                .authenticate());
gugia commented 8 years ago

Thanks. I will try again as soon as working on Monday. /* ***** */ Cause I dont know what <projectDomainId> it is, i use v2 instead of v3. Now it goes well.

gugia commented 8 years ago

<Exception in thread "main" ConnectionException{message=Already connected, status=0} at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.invoke(HttpExecutorServiceImpl.java:58) at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.execute(HttpExecutorServiceImpl.java:33) at org.openstack4j.core.transport.internal.HttpExecutor.execute(HttpExecutor.java:51) at org.openstack4j.openstack.internal.OSAuthenticator.authenticateV2(OSAuthenticator.java:117) at org.openstack4j.openstack.internal.OSAuthenticator.invoke(OSAuthenticator.java:50) at org.openstack4j.openstack.client.OSClientBuilder$ClientV2.authenticate(OSClientBuilder.java:117) at org.openstack4j.openstack.client.OSClientBuilder$ClientV2.authenticate(OSClientBuilder.java:81) at com.xkt.cloudapp.xktcloudapp.App.auv2(App.java:50) at com.xkt.cloudapp.xktcloudapp.App.main(App.java:31) Caused by: javax.ws.rs.ProcessingException: Already connected at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:233) at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:656) at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:653) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:228) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424) at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:653) at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:413) at org.openstack4j.connectors.jersey2.HttpCommand.execute(HttpCommand.java:79) at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.invokeRequest(HttpExecutorServiceImpl.java:65) at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.invoke(HttpExecutorServiceImpl.java:56) ... 8 more Caused by: java.lang.IllegalStateException: Already connected at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3014) at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:316) at org.glassfish.jersey.client.HttpUrlConnector.setOutboundHeaders(HttpUrlConnector.java:348) at org.glassfish.jersey.client.HttpUrlConnector.access$100(HttpUrlConnector.java:87) at org.glassfish.jersey.client.HttpUrlConnector$3.getOutputStream(HttpUrlConnector.java:311) at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200) at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:194) at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.java:262) at org.glassfish.jersey.message.internal.OutboundMessageContext.commitStream(OutboundMessageContext.java:811) at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:543) at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:315) at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227) at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:224) ... 19 more>


OSClient os = OSFactory.builder().endpoint("https://public.fuel.local:5000/v2.0/") .credentials("name", "password").tenantName("admin").authenticate();

The code above was working. But a problem("Already connected") came out after Openstack re-installation. Then I used REST to send request to authentication address. I cound not get normal response until the checkbox of following picture is checked.@auhlig image

auhlig commented 8 years ago

Hi @gugia, It's worth trying to apply configuration to the OSClient

.withConfig(Config.newConfig().withSSLContext(SSLContext sslContext))

as described here http://www.openstack4j.com/javadoc/org/openstack4j/core/transport/Config.html#withSSLContext .

I hope that helps you.

I also think we're digressing here. Maybe your question is something for stackoverflow?

gugia commented 8 years ago

Sorry, my bad.Thank you @auhlig .

binary2quantum commented 6 years ago

Exception in thread "main" java.lang.NoSuchMethodError: javax.ws.rs.core.Response.close()V at org.openstack4j.connectors.resteasy.HttpResponseImpl.close(HttpResponseImpl.java:123) at org.openstack4j.core.transport.HttpEntityHandler.closeQuietly(HttpEntityHandler.java:118) at org.openstack4j.core.transport.HttpEntityHandler.handle(HttpEntityHandler.java:68) at org.openstack4j.connectors.resteasy.HttpResponseImpl.getEntity(HttpResponseImpl.java:64) at org.openstack4j.connectors.resteasy.HttpResponseImpl.getEntity(HttpResponseImpl.java:51) at org.openstack4j.openstack.internal.OSAuthenticator.authenticateV3(OSAuthenticator.java:196) at org.openstack4j.openstack.internal.OSAuthenticator.invoke(OSAuthenticator.java:74) at org.openstack4j.openstack.client.OSClientBuilder$ClientV3.authenticate(OSClientBuilder.java:172) at org.openstack4j.openstack.client.OSClientBuilder$ClientV3.authenticate(OSClientBuilder.java:129) at com.example.openstack.keystone.main(keystone.java:21)

i'm experiencing this error when i get my token..

Please help me to solve it..