Angular - Spring Boot - Keycloak - 401错误
Posted
技术标签:
【中文标题】Angular - Spring Boot - Keycloak - 401错误【英文标题】:Angular - Spring Boot - Keycloak - 401 Error 【发布时间】:2020-07-18 07:11:41 【问题描述】:我正在尝试使用由 Keycloak 保护的 Spring Boot Restservice 实现 Angular 应用程序。
在我的计算机上本地,一切正常。 Angular 应用程序由 Keycloak(带有 keycloak-angular)引导,所以我必须登录才能看到应用程序。应用程序将 Restcalls 与令牌一起发送到 Spring Boot。 Restservice 是 keycloak.bearer-only 接收令牌并使用令牌中的角色进行过滤。
这在本地工作得很好,但是从我在服务器上部署它的那一刻起,我每次尝试使用启用的 keycloak 访问我的 Restservice 时都会收到 401 错误。 (我在 Keycloak 上登录并拥有有效的令牌)。
这是我在 Spring Boot 调试日志中得到的:
2020-04-06 12:28:54.854 DEBUG 1962 --- [nio-2001-exec-2] o.s.web.servlet.DispatcherServlet : "ERROR" dispatch for GET "/error", parameters=
2020-04-06 12:28:54.875 DEBUG 1962 --- [nio-2001-exec-2] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#error(HttpServletRequest)
2020-04-06 12:28:54.970 DEBUG 1962 --- [nio-2001-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [application/json, text/plain, */*] and supported [application/json, application/*+json, application/json, application/*+json]
2020-04-06 12:28:54.971 DEBUG 1962 --- [nio-2001-exec-2] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [timestamp=Mon Apr 06 12:28:54 CEST 2020, status=401, error=Unauthorized, message=No message availab (truncated)...]
2020-04-06 12:28:55.051 DEBUG 1962 --- [nio-2001-exec-2] o.s.web.servlet.DispatcherServlet : Exiting from "ERROR" dispatch, status 401
我的 Spring Boot application.properties 的 Keycloak-Part:
keycloak.enabled=true
keycloak.auth-server-url=http://172.16.1.20:8180/auth
keycloak.realm=Immodat
keycloak.resource=login-app
keycloak.bearer-only=true
keycloak.cors=true
keycloak.security-constraints[0].authRoles[0]=aa.intern.write
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/
有一个带有 CrossOrigin 注释的 RestController。而且里面所有的方法都有GetMapping, PostMapping,...
@RestController
@CrossOrigin
public class FormController
@PostMapping("/forms")
Form createForm(@RequestBody Form form)
/* ... */
@GetMapping("/forms/name")
Form getForm(@PathVariable String name)
/* ... */
.
.
.
在 Keycloak-Client-Settings 中,Return-Url 和 Web-Origin 都设置为“*”以允许从任何地方访问。
我有什么遗漏的吗?本地一切正常。如果 Keycloak 被禁用,也可以在服务器上,但所有三个一起都不起作用。
【问题讨论】:
【参考方案1】:好的,我发现了问题。可能有点傻。
三台服务器中的一台时间错误,因此 Keycloak-Token 对这台服务器无效。
如果您遇到 401 错误并且不知道原因,请检查您的服务器时间!
【讨论】:
以上是关于Angular - Spring Boot - Keycloak - 401错误的主要内容,如果未能解决你的问题,请参考以下文章
Angular集成Spring Boot,Spring Security,JWT和CORS
在 Spring Boot 中将 Angular 环境变量传递给编译的静态 Angular 文件
Angular - Spring Boot - Keycloak - 401错误
Angular 4.0 + Spring boot + Spring Security:TemplateInputException:解析模板“登录”时出错