Keycloak 和 Spring Boot 身份验证错误

Posted

技术标签:

【中文标题】Keycloak 和 Spring Boot 身份验证错误【英文标题】:Keycloak and Spring Boot authentication error 【发布时间】:2020-08-19 10:59:11 【问题描述】:

我在 docker 容器中运行 keycloak,并根据这个想法运行我的 spring boot 应用程序。 当我尝试在 keycloak 表单中登录时,我得到一个错误

failed to turn code into token
status from server: 401
"error":"unauthorized_client","error_description":"Client secret not provided in request"

但例外是: org.keycloak.adapters.springsecurity.KeycloakAuthenticationException: Invalid authorization header, see WWW-Authenticate header for details

在 keycloak 管理面板中,我已经配置了我的用户和角色。

属性文件:

keycloak.realm=myrealm
keycloak.resource=myclient
keycloak.auth-server-url=http://localhost:8081/auth
keycloak.ssl-required=external
keycloak.public-client=true
keycloak.principal-attribute=preferred_username
keycloak.credentials.secret=eba15252-we3r-423e-8df0-87f1da4a7c04
keycloak.use-resource-role-mappings=true

请有人帮忙解决这个问题吗?

**更新:如果我在没有 docker 的情况下运行 keycloak,它可以工作。

【问题讨论】:

能否请您发布您的请求是什么样的,您的错误信息很清楚。 请同时从管理面板发布您的客户端配置。 试试keycloak.public-client=false。我假设“myclient”是公开的(否则不需要秘密) 【参考方案1】:

很明显,在发布请求中您没有输入 client_secret。您应该能够从 Keycloak 管理员的“客户”部分获得此信息。你的请求应该是这样的。

curl --location --request POST 'KEYCLOAK_BASE_URL/auth/realms/KEYCLOAK_REALM/protocol/openid-connect/token' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_id=web-app-client' \
--data-urlencode 'username=user@gmail.com' \
--data-urlencode 'password=123123' \
--data-urlencode 'client_secret=ea05b21c-fcb4-412d-acb7-c888ba7f996d' \
--data-urlencode 'scope=openid phone address'

【讨论】:

以上是关于Keycloak 和 Spring Boot 身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章

使用spring boot(安全)和keycloak启用角色身份验证?

在 spring-boot 中禁用特定 url 的 Keycloak 身份验证

如何在 Spring Boot 应用程序中测试 Keycloak 身份验证?

Spring Boot webservice (REST) - 如何将 JUnit 5 测试从基本身份验证更改为 OAuth2 (Keycloak)

对于未经身份验证的请求,Keycloak spring boot 返回 403 而不是 401

Spring Boot Keycloak - 每个请求验证 3 次