Dan*_*Dan 4 java spring spring-security keycloak
我试图通过 Keycloak 访问 Spring 应用程序,但总是收到 401 未经授权的错误。基本上,我有一个单独运行良好的聊天模块,但是一旦添加 Keycloak,由于 401 错误,我将无法访问该应用程序。我已经遵循了大约 3 个教程,这些教程显示了与我所做的类似的事情,但我仍然不知道我做错了什么。
这是我的应用程序的配置:
keycloak:
enabled: true
realm: myReal
resource: myReal-api
public-client: true
bearer-only: true
auth-server-url: http://localhost:8080/auth
credentials:
secret: 82eXXXXX-3XXX-4XXX-XXX7-287aXXXXXXXX
principal-attribute: preferred_username
cors: true
Run Code Online (Sandbox Code Playgroud)
我有localhost:port/
一个第一个界面(没有 Keycloak 安全性),它有一个到我的服务的链接,即localhost:port/index/{topicName}
. 现在,当我单击该链接时,我应该会看到 Keycloak 身份验证屏幕,但我却收到了 401 错误。
我检查了请求的标头,将 HttpServletRequest 作为参数添加到我的displayMessage
方法中,实际上我可以在 IDE 的控制台中显示 access_token 和 X-Auth-Token。但似乎当我点击该链接时,它发送的请求没有令牌。
这是我的控制器方法(我的控制器类注释为@Controller
:
keycloak:
enabled: true
realm: myReal
resource: myReal-api
public-client: true
bearer-only: true
auth-server-url: http://localhost:8080/auth
credentials:
secret: 82eXXXXX-3XXX-4XXX-XXX7-287aXXXXXXXX
principal-attribute: preferred_username
cors: true
Run Code Online (Sandbox Code Playgroud)
我的 Keycloak 配置文件的灵感来自我读过的教程,因此其中可能存在我不知道的错误(不确定方法access
和方法之间有什么区别hasRole
):
@GetMapping(path = "/")
public String index() {
return "external";
}
@GetMapping(path = "/index/{topicName}",
produces = MediaType.APPLICATION_JSON_VALUE)
public String displayMessages(Model model,
@PathVariable String topicName) {
//HttpHeaders headers = new HttpHeaders();
//headers.set("Authorization", request.getHeader("Authorization"));
//header = request.getHeader("Authorization");
//System.out.println(" T O K E N "+request.getHeader("X-Auth-Token"));
projectServiceImpl.findByName(topicName);
List<Message> messages = messageServiceImpl.findAllMessagesByProjectName(topicName);
model.addAttribute("topic", topicName);
model.addAttribute("message",messages);
return "index";
}
Run Code Online (Sandbox Code Playgroud)
我真的不知道我还应该改变什么才能让它发挥作用,但我相信其中肯定有问题。但我想如果我在尝试访问我的服务时可以有 Keycloak 身份验证屏幕,那就没问题了。
我收到了同样的错误,需要仔细检查的一件事是auth-server-url
服务器和获取令牌的客户端是否相同。
即如果一个是dns名称,一个是IP地址,则不会授权。(在我的例子中,我有 localhost 和 127.0.0.1,所以授权失败)
服务器,src/main/resources/application.yml
邮递员/客户:
归档时间: |
|
查看次数: |
14089 次 |
最近记录: |