我正在使用Keycloak 3.4.3并保护基于Spring的Rest服务。
以下是Keycloak客户端配置:
Client Protocol: openid-connect<br>
Access Type: public<br>
Standard Flow Enabled: ON<br>
Implicit Flow<br>
Direct Access Grants Enabled: ON<br>
Authorization Enabled: OFF<br>
将Access Type作为公共密钥提供秘密是否很重要。如果是,我怎么能提供秘密,因为我在Keycloak客户端配置中找不到任何选项。请帮忙。
2018-02-28 15:19:10.216 WARN 7813 --- [nio-8080-exec-2] aaClientIdAndSecretCredentialsProvider:客户'democlientid'没有秘密可用2018-02-28 15:19:10.375 ERROR 7813 - - [nio-8080-exec-2] okadapters.OAuthRequestAuthenticator:无法将代码转换为令牌
java.net.ConnectException:java.base / java.net.PlainSocketImpl.socketConnect(Native Method)〜[na:na]在java.base / java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java)上拒绝连接(连接被拒绝) :400)〜[na:na] at java.base / java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)〜[na:na] at java.base / java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java :225)〜[na:na] at java.base / java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)〜[na:na] at java.base / java.net.Socket.connect(Socket.java :org.apache的org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:121)〜[httpclient-4.5.5.jar!/:4.5.5]的~591)〜[na:na] .http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)~ [httpclient-4.5.5.jar!/:4.5.5] at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry。 java:144)〜[httpclient-4.5.5.jar!/:4.5.5]在org.apache.http.impl。 conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:134)〜[httpclient-4.5.5.jar!/:4.5.5] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610)~ [httpclient-4.5.5.jar!/:4.5.5]在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445)〜[httpclient-4.5.5.jar!/:4.5。 5]在org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835)〜[httpclient-4.5.5.jar!/:4.5.5] org.apache.http.impl.client。在org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)〜[httpclient]中的CloseableHttpClient.execute(CloseableHttpClient.java:83)〜[httpclient-4.5.5.jar!/:4.5.5] -4.5.5.jar!/:4.5.5]在org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)〜[httpclient-4.5.5.jar!/:4.5.5]在org.keycloak的org.keycloak.adapters.ServerRequest.invokeAccessCodeToToken(ServerRequest.java:111)〜[keycloak-adapter-core-3.4.3.Final.jar!/:3.4.3.Final] .adapters.OAuthRequestAuthenticator.resolveCode(OAuthRequestAuthenticator.java:336)〜[keycloak-adapter-core-3.4.3.Final.jar!/:3.4.3.Final] at org.keycloak.adapters.OAuthRequestAuthenticator.authenticate(OAuthRequestAuthenticator。 java:281)〜[keycloak-adapter-core-3.4.3.Final.jar!/:3.4.3.Final] org.keycloak.adapters.RequestAuthenticator.authenticate(RequestAuthenticator.java:139)〜[keycloak-adapter -core-3.4.3.Final.jar!/:3.4.3.Final] at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.authenticateInternal(AbstractKeycloakAuthenticatorValve.java:203)〜[spring-boot-container-bundle-3.4。 3.Final.jar!/:3.4.3.Final] at org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve.authenticate(KeycloakAuthenticatorValve.java:50)[spring-boot-container-bundle-3.4.3.Final.jar! /:3.4.3.Final] at org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve.doAuthenticate(KeycloakAuthenticatorValve.java:57)[spring-boot-container-bundle-3.4.3.Final.jar!/:3.4.3。最终]在org.apache.catalina.aut henticator.AuthenticatorBase.invoke(AuthenticatorBase.java:586)[tomcat-embed-core-8.5.27.jar!/:8.5.27] at org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.invoke(AbstractKeycloakAuthenticatorValve.java:181) 〜[spring-boot-container-bundle-3.4.3.Final.jar!/:3.4.3.Final] org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)[tomcat-embed- !核心8.5.27.jar /:27年5月8日]
您有配置错误;服务器地址不对。
如果您将检查admin-cli
领域下的客户端master
,您将很容易理解为什么默认情况下为此客户端提及access-type=public
。仅供参考,请查看官方文件中的以下详细信息
访问类型
这定义了OIDC客户端的类型。
因此,您的客户端具有公共访问类型,因此它意味着您要为客户端站点应用程序登录,因此对于公共访问类型keyclock不会给出密钥。
除了你的问题,另一个优点是,用户也可以从命令提示符使用keyclock。你可以这样登录
/opt/keycloak/bin/kcadm.sh config credentials --server https://<IP ADDRESS>:8666/auth --realm master --user admin --password admin --client admin-cli
你可以执行管理任务