我们在应用程序中使用 keycloak API。当我们尝试检索领域的客户端列表时,它会传递 403 禁止错误。非常感谢您的评论以避免此事。
String authServer = UriUtils.getOrigin(httpRequest.getRequestURL().toString()) + AUTH_CONTEXT_PATH;
String token = httpRequest.getHeader("Authorization").replaceAll("Bearer ", "");
String realmClientsUrl = authServer+"/admin/realms/testrealm/clients/"+getClientRepresentationId(authServer,realm,token);
ClientRequest request = getClientRequest(realmClientsUrl,token);
ClientResponse<String> response;
ClientRepresentation clientRepresentation = null;
try{
response = request.get(String.class);
validateResponse(response,"CLIENT_REPRESENTATION");
clientRepresentation = response.getEntity(ClientRepresentation.class);
return clientRepresentation;
} catch (Exception e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
通过的错误,
java.lang.Exception: ErrorStage:CLIENT_REPRESENTATION_ID,HTTP responseCode:403,StatusIno=Forbidden
Run Code Online (Sandbox Code Playgroud) 参考 Keycloak 的帐户链接文档,我需要从访问令牌中获取用户会话 id和客户端会话 id 。
然而,我只发现他们在令牌上调用的东西显然与查看他们的javascript 适配器源代码session_state相同。sessionId
我认为这是他们指的用户会话ID ?如果是这样,我在哪里可以找到这个所谓的客户端会话 id?
仅使用 keycloak-authz-client (6.0.1)(无 Spring Security),我需要从服务提供商处读取用户信息和用户组。
获得正确的访问令牌后,借助 AuthzClient,我能够访问用户信息 API:
UriBuilder target = UriBuilder.fromUri(kcURL);
target.path("realms/{realm}/protocol/openid-connect/userinfo")
.resolveTemplate("realm", this.realm);
UserInfoOIDC info = new UserInfoOIDC();
try {
UserInfo response = this.buildBearerInvocation(target, accessToken).get(UserInfo.class);
info.setName(response.getName());
info.setUsername(response.getPreferredUsername());
info.setCompleted(true);
log.info("User info successfully retrieved from {}", this.realm);
} catch (WebApplicationException e) {
log.error("User info failure on {}: {}", this.realm, e.getMessage());
}
...
private Invocation.Builder buildBearerInvocation(UriBuilder target, String accessToken) {
WebTarget webTarget = restClient.target(target);
Invocation.Builder builder = webTarget.request(APPLICATION_JSON)
.header(AUTHORIZATION, "Bearer " + accessToken);
return builder;
}
Run Code Online (Sandbox Code Playgroud)
但我无法访问“admin API”:
UriBuilder target = …Run Code Online (Sandbox Code Playgroud) 我使用 LDAP 用户设置了一个 keycloak 服务器,以便在我的应用程序上利用 SSO。我想通过 Keycloak API 更改应用程序中登录用户的密码。因此,将来我的 Angular 应用程序将能够向 keycloak API 发出请求来更改登录用户的密码。
因此,我尝试执行文档中指示的操作(方法 PUT,重置密码),但没有成功......我用邮递员进行了测试,我想知道我的令牌是否是要使用的令牌?问题是否来自其他地方?
我有这个网址:
PUT {url}/auth/admin/realms/{realm}/users/{id user}/reset-password/
我有这个标题:
Content-type application/json
我有这个身体:
{
"pass" : {
"type": "password",
"temporary": false,
"value": "my-new-password"
}
}
Run Code Online (Sandbox Code Playgroud)
如果我没有尝试快速更新令牌,我会收到 401 错误(这让我说问题可能不是来自令牌),而当我通过 postman oAuth 2.0 获得新令牌时,我会收到 403 或 400 错误
我有时会收到这样的消息:
Unrecognized field "pass" (class org.keycloak.representations.idm.CredentialRepresentation), not marked as ignorable
请帮我 !
你可以在这里看到我在邮递员中的授权,我不知道什么是“状态”
我正在尝试将 Spring Security 添加到 Spring Boot 应用程序中。除非存在依赖项版本问题,否则我的设置中是否还有其他内容可能会丢失,从而导致下面的异常跟踪。我还添加了一些来自 keycloak 的依赖项,我在下面复制了这些依赖项。
聚甲醛
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>7.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<!--Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.keycloak.bom</groupId>
<artifactId>keycloak-adapter-bom</artifactId>
<version>3.3.0.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
我添加了以下类作为 spring security 和 keycloak 设置的一部分:
import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver;
import org.keycloak.adapters.springsecurity.KeycloakSecurityComponents;
import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider;
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import …Run Code Online (Sandbox Code Playgroud) 由于最新的 (7.0.1) docker 映像,无法将远程调试会话连接到容器内运行的 JVM。
我已经推出:
docker run \
-p 9001:8080 \
-p 9100:9100 \
-e KEYCLOAK_USER=keycloak \
-e KEYCLOAK_PASSWORD=password \
jboss/keycloak:7.0.1 \
-b 0.0.0.0 \
--debug 9100
Run Code Online (Sandbox Code Playgroud)
然后尝试使用此 VSCode 配置连接调试会话:
{
"type": "java",
"name": "Debug (Attach) - Remote",
"request": "attach",
"hostName": "localhost",
"port": 9100
}
Run Code Online (Sandbox Code Playgroud)
并收到以下消息:
Failed to attach to remote debuggee VM
Reason:java.net.SocketException: Connection reset
Run Code Online (Sandbox Code Playgroud)
顺便说一句,同样适用于带有 6.0.1 和 7.0.0 docker 图像的 Keycloak。
我怀疑这是迁移到自 Keycloak 7.0.1 以来使用的新 ubi8-minimal 基础镜像的副作用
关于如何解决这个问题的任何线索?
问候,
我们不久前设置了一个 Keycloak 服务器,添加了一些 Active Directory 联合,现在发现有些用户没有同步,因为他们使用与其他用户相同的电子邮件地址。在我们的例子中这是正确的,所以没有简单的方法来改变它。
我记得一个 REALM 设置,可以防止/允许使用重复的电子邮件,但在我们的 REALM 中再也找不到它了。因此,我创建了一个新的,并在 REALM-Settings/Login 下显示。
无论我尝试做什么,我都无法恢复此开关以更改设置以允许重复的电子邮件。我检查了数据库 ( select duplicate_emails_allowed from realm where id = 'companyrealm';) 并看到它被设置为 'f' (false)。还尝试将其设置为 't' (true) 但这没有区别。
当我们创建另一个 REALM 时,设置就在那里。很奇怪吧?难道这个设置的出现取决于什么?我们已经尝试删除所有导入的用户,禁用联合提供程序,甚至删除了他,但没有。
我们想在 Kubernetes 上建立一个高可用的 Keycloak 集群(使用 ldap 作为用户联盟)。我们决定使用codecentrics helm charts,因为我们正在尝试将它们用于单个 Keycloak 实例设置并且效果很好。对于集群,我们在尝试正确设置所有内容时遇到了一些问题,但没有在广泛的互联网上找到最佳资源。因此,我决定写一个简短的总结,我们的主要问题在哪里以及我们如何解决这些问题。
本网站(除其他外)上描述的我们问题的解决方案,但描述的内容非常简短,感觉部分不完整。
我们在以下方面遇到的问题:
jgroups.discoveryProtocoldiscoveryPropertiesvalues.yaml额外问题(我们已经面临单实例设置):
如果由于代码中心更新他们的掌舵图而发生变化,我将尝试更新它。
感谢 codecentrics 顺便提供了 helm charts!
我创建了一个客户端角色 asspecial_agent并添加了两个属性 asapprove_leave和raise_leave。
我正在使用Javascript 适配器并且能够在我的网站上成功登录。我还可以接收分配给用户的客户端角色。但是,我想获取客户端角色中指定的自定义属性。下面是 keycloak.tokenParsed 的结果
有没有办法检索客户端角色属性?我Mappers在客户端设置中查找了,但无法弄清楚详细信息。
keycloak ×10
java ×3
api ×1
debugging ×1
docker ×1
html ×1
javascript ×1
kubernetes ×1
postman ×1
put ×1
rest ×1
security ×1
spring ×1
spring-boot ×1