我已经为我的spring引导服务器使用了keydosepspring引导适配器,并且我能够让我的用户通过身份验证。但是,当我想获取用户数据(比如他所在的组)时,我无法通过keyClopePrinciple对象获取数据,我可以通过请求访问该对象。但是,我能够获得用户的id,并且我认为在spring引导应用程序中访问用户配置文件是很简单的,因为它有keydrope适配器。关于如何获取这些数据,或者我是否应该添加或执行其他操作,有什么想法吗?
pom.xml文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-security</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-spring-boot-starter</artifactId>
<version>12.0.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.security</groupId>-->
<!-- <artifactId>spring-security-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-dependencies</artifactId>
<version>${spring-boot-admin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.keycloak.bom</groupId>
<artifactId>keycloak-adapter-bom</artifactId>
<version>12.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
应用程序.yaml
server:
port: 9000
keycloak:
auth-server-url: http://localhost:8080/auth
realm: test
resource: spring-boot-client
credentials:
secret: 41e7abe2-35a4-46c0-ba68-40dd16080b1a
bearer-only: true
public-client: true
securityConstraints:
- authRoles:
- CANDIDATE
- AUTHOR
- ADMIN
securityCollections:
- name: ping
patterns:
- /ping
- authRoles:
- AUTHOR
- ADMINN
securityCollections:
- name: Author
patterns:
- /author
logging:
level:
org.keycloak: TRACE
如何访问向spring引导服务器发出请求的用户的id
@GetMapping("/ping")
public ResponseEntity<String> ping(KeycloakPrincipal<KeycloakSecurityContext> principal) {
String user_id = principal.getKeycloakSecurityContext().getToken().getSubject();
return ResponseEntity.ok(user_id);
}
任何指导都会有帮助,因为我看了所有的文件,我可以得到我的手。是的,key斗篷确实提供了一个javadoc,我引用了它,还提供了一个adminrestapi,我认为这是一个访问这些数据的坏方法(我可能错了)。我想知道仅仅使用starter适配器是否不能让我访问javaapi,因为我只能访问keydrope原理。
1条答案
按热度按时间iezvtpos1#
为什么restapi不是获取用户特定数据的好方法?您可以使用客户机机密和最小领域角色配置特定客户机,以获取所需的数据。你看了令牌没有?您需要的信息是否已经在令牌中?
您可以获得类似realm roles token.getotherclaims的数据https://www.keycloak.org/docs-api/10.0/javadocs/org/keycloak/representations/accesstokenresponse.html
您必须确保您Map的信息在令牌中。因此,请查看管理控制台->客户端->您的客户端->Map器->评估
也许你可以发布一些你当前配置的图片