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

Spring Boot Keyclope:可选的身份验证endpoint

方德宇
2023-03-14

我正在尝试使用Keycloak配置Spring Boot应用程序以使其具有可供经过身份验证和未经身份验证的用户访问的endpoint。对于经过身份验证的用户,我想返回一些额外信息。这是我试图实现的一个简单示例

@RestController
public class HelloController {

    @GetMapping("/")
    public String index(Principal principal) {
        KeycloakPrincipal keycloakPrincipal = (KeycloakPrincipal) principal;
        if (keycloakPrincipal != null) {
            return "Hello " + keycloakPrincipal.getKeycloakSecurityContext().getToken().getPreferredUsername();
        } else {
            return "Hello";
        }

    }
}

application.properties:

keycloak.securityConstraints[0].authRoles[0] = *
keycloak.securityConstraints[0].securityCollections[0].name = Hello
keycloak.securityConstraints[0].securityCollections[0].patterns[0] = /*

到目前为止,我只对这两种情况中的一种起作用。如果我使用上面的安全约束保护endpoint,那么只有经过身份验证的用户才能访问该endpoint。如果删除安全约束,则每个人都可以访问endpoint,但主体将始终为null。

是否有可能实现预期行为?

共有1个答案

徐洋
2023-03-14

您是否尝试过主体=SecurityContextHolder.getContext(). getAuthentication();之类的操作?

我相信Principal as方法参数只在安全endpoint上填充,但我不确定它是否会存在于SecurityContext中。如果没有,您需要添加一个过滤器来自己添加它。

 类似资料:
  • 我正在用java编写一个必须在我的工作环境中运行的程序。这是我的代码片段: 在我的家庭网络上,这工作得非常好,但在商业网络上,我会遇到以下错误: onnection.getSocketException:软件导致连接中止:recv在java.net.SocketInputSonquerer.runRead0(本机方法)在onquerer.java:44SocketInputStream.read(

  • 问题内容: 我有一条路由,需要经过身份验证和未经身份验证的用户使用。我用来启用身份验证,但是它可以防止任何未经身份验证的用户访问路由(正常)。 如何允许未经身份验证的用户也访问路由? 似乎没有可以传递给我的护照策略中的选项。 问题答案: 您可以通过扩展现有实例来创建自己的实例: 然后在您的控制器上使用此代码:

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答

  • 我试图使用swift代码在网站上找到这里,但响应是html代码与两个错误:“您必须输入密码!”和“您必须输入用户名!”我是NSURLSession的新手,试图更改用于身份验证的字符串,但无法更改响应。下面是我的代码: 这是控制台响应中的内容:

  • 我正在开发一个具有自己的身份验证和授权机制的REST应用程序。我想使用JSON Web Tokens进行身份验证。以下是有效且安全的实现吗? < li >将开发一个REST API来接受用户名和密码并进行认证。要使用的HTTP方法是POST,因此没有缓存。此外,在传输时还会有安全SSL < li >在认证时,将创建两个JWTs访问令牌和刷新令牌。刷新令牌将具有更长的有效期。这两个令牌都将写入coo