当前位置: 首页 > 知识库问答 >
问题:

使用接收的访问令牌检索Keycloak用户数据

宋翔
2023-03-14

共有1个答案

巢海
2023-03-14

我已经想出了如何解决这个问题!

首先,在类的顶部附近添加以下内容:

@Context
javax.ws.rs.core.SecurityContext securityContext;

这将与服务器安全性的上下文一起注入。在使用Keycloak时,WildFly需要安装WildFly适配器,并且必须将web.xml配置为使用Keycloak。

<!-- https://mvnrepository.com/artifact/org.keycloak/keycloak-core -->
<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-core</artifactId>
    <version>4.4.0.Final</version>
</dependency>
if (securityContext != null && securityContext.getUserPrincipal() instanceof KeycloakPrincipal) {
    KeycloakPrincipal principal = ((KeycloakPrincipal) securityContext.getUserPrincipal());
AccessToken token = principal.getKeycloakSecurityContext().getToken();

在某些情况下(取决于Keycloak和/或WildFly的版本),getToken()可能返回null。在这些情况下,使用getIdToken():

IDToken token = principal.getKeycloakSecurityContext().getIdToken();

AccessToken扩展了IDToken,因此在这两种情况下都有完整的功能(对于这种情况)。

从令牌中,可以提取所有用户数据。例如,我们获取用户的用户名。在Keycloak中,此属性称为“首选用户名”。

String user = token.getPreferredUsername();
if (securityContext != null && securityContext.getUserPrincipal() instanceof KeycloakPrincipal) {
    KeycloakPrincipal principal = ((KeycloakPrincipal) securityContext.getUserPrincipal());
    AccessToken token = principal.getKeycloakSecurityContext().getToken();
    // IDToken token = principal.getKeycloakSecurityContext().getIdToken();

    System.out.println("User logged in: " + token.getPreferredUsername());
} else {
    System.out.println("SecurityContext could not provide a Keycloak context.");
}
 类似资料:
  • 我必须将一个遗留的身份验证系统移到Keycloak,并且我不能更改客户端上的实际工作流。因此,我需要用我的api(在node.js中)提供一个用户创建和登录系统,该系统反过来代表用户从Keycloak创建和获取访问令牌。 我能够创建一个用户,但我无法找到为该用户生成访问令牌的方法。我找到的唯一解决办法是创建一个用户并设置一个随机密码,然后要求授予提供用户名和密码的用户,但这意味着我必须在自己的一侧

  • 我有一个Keycloak(独立)V1.9.4。最后在AWS实例上使用Wildfly 10安装安装程序,并尝试使用Keycloak(通过Keycloak的登录页面)和Twitter4j来验证Twitter用户,然后明显地让我的应用程序验证并查看用户的时间线等。 我已经配置了身份提供程序(Twitter)、领域和我的客户端应用程序。 我还在apps.Twitter.com上设置了一个Twitter应用

  • 我使用Keycloak来保护我的react前端和Node.js后端。这些客户端使用基于角色的授权进行保护。 我尝试这个endpoint来撤消用户访问令牌。但不起作用/auth/admin/realms//users/ 是否有方法在Keycloak中撤销特定用户的访问令牌?

  • 我目前正在尝试使用ADFS 2016认证angular 7应用程序(使用angular-oauth2-oidc)。到目前为止,它工作得很好。当我访问应用程序时,我被重定向到ADFS登录页面,在那里输入我的凭据并获得令牌。 现在,当应用程序调用web API时,它在请求头中发送访问令牌。ADFS返回的访问令牌如下所示: 问题是web API必须知道进行调用的用户的ID(因为在应用程序级别定义了一些权

  • 我试图使用从Spring应用程序中的公共客户端获取访问令牌。 谁能帮我弄清楚我做错了什么吗?

  • 我正在尝试使用邮递员应用程序从keycloak获取访问令牌。我使用的流是身份验证代码流。URI am提供的身份验证是 http://localhost:8080/auth/realms/realm_name/openid-connect/token 即使在keycloak中,我在clients下的Security-admin-console中将有效的重定向URI修改为http://localhos