当前位置: 首页 > 面试题库 >

在使用Keycloak保护的Web应用程序中获取登录的用户名

尹承泽
2023-03-14
问题内容

我已经使用基于标准的基于wildfly的Keycloak适配器的Keycloak保护了企业应用程序。我面临的问题是,其余的Web服务在被调用时需要知道当前登录的用户名。如何从Keycloak获取登录的用户信息?

我尝试使用SecurityContextWebListener等等。但是没有一个能够提供所需的详细信息。


问题答案:

您从安全上下文中获取所有用户信息。

例:

public class Greeter {

  @Context
  SecurityContext sc;

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public String sayHello() {

    // this will set the user id as userName
    String userName = sc.getUserPrincipal().getName();

    if (sc.getUserPrincipal() instanceof KeycloakPrincipal) {
      KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>)  sc.getUserPrincipal();

      // this is how to get the real userName (or rather the login name)
      userName = kp.getKeycloakSecurityContext().getIdToken().getPreferredUsername();
    }

    return "{ message : \"Hello " + userName + "\" }";
}

为了传播安全上下文,您必须具有如下配置的安全域: JBoss /
Wildfly适配器配置



 类似资料:
  • 我正在研究React应用程序与KeyCloak的集成。我已经在本地计算机上安装了keycloak服务器版本11.0.2。我能够访问管理登录并创建管理用户。我还使用keycloak创建了一个具有凭据的自定义客户端和用户。我的react应用程序是在我的机器的端口9000上托管的,而keycloak是在8080(默认)端口上托管的。现在,当我重定向到我的应用程序URL时,它会自动重定向到下面的URL:

  • 这就是我想使用WebDriver执行的。 选中“保持用户登录”复选框登录站点 问题是当我关闭驱动程序并重新打开它时,我没有登录。 我的代码看起来像这样-

  • 我试图把我的头缠在这个问题上2天现在,我找不到任何正确的解决方案在网上和论坛上这个问题。 我无法使用@login\u required decorator在flask应用程序中保护dash应用程序。我可以使用blueprint route中的@login\u调用dash应用程序,以确保其安全并将其重定向到dash应用程序。 但是如果我直接调用dash-applike_localhost:5000/

  • 本文向大家介绍如何使用户登录离线Web应用程序?,包括了如何使用户登录离线Web应用程序?的使用技巧和注意事项,需要的朋友参考一下 在在线登录时,您首先需要针对服务器进行身份验证,如果可以,请在数据库中存储用户名和哈希密码。 如果可以在数据库中找到该帐户,则仅当用户自上次登录以来已更改密码时,才需要生成一个新的哈希。 您还需要针对本地数据库进行身份验证。使用该应用的在线版本至少登录一次。

  • 如果在类路径上添加了Spring Boot Security依赖项,则Spring Boot应用程序会自动要求对所有HTTP端点进行基本身份验证。 端点“/”和“/ home”不需要任何身份验证。 所有其他端点都需要身份验证。 要将Spring Boot Security添加到Spring Boot应用程序,我们需要在构建配置文件中添加Spring Boot Starter Security依赖项

  • 如何使用Keycloak restendpoint获取用户在Keycloak中的最后登录会话详细信息?