小编max*_*vry的帖子

Keycloak身份验证:外部用户如何在不暴露客户端机密的情况下获取令牌

我有一个关于 keycloak 如何在没有 GUI 访问权限的情况下与客户端一起工作的问题。

基本上我有:

  • 配置有领域、客户端(访问类型机密)和用户的 keycloak 服务器
  • 具有 GUI 的服务器应用程序,还提供 API,通过 keycloak 进行安全保护(客户端、用户、blablabla)

这已经可以工作了,因为我可以登录 GUI、进行重定向等。

当我可以访问 GUI 时,即使访问 API 也能正常工作:我登录 UI,按照重定向操作并让 UI 显示令牌。人类(为了区分用户和应用程序)可以在任何 API 客户端中使用令牌。

在这种情况下,用户永远不会看到客户端秘密,这本质上是正确的方式。(请注意,我非常愿意接受人们告诉我我的直觉是错误的!)

到目前为止我无法做的是找到服务器应用程序(没有 GUI)可以获得有效令牌的方式?

据我了解,authorization_endpoint需要客户端id和客户端密钥来获取令牌,我宁愿避免:我不认为将我的客户端密钥提供给我的所有“客户”是正确的方法去做吧。

或者,我可以在我的客户端上创建一个 API,该 API 会请求用户凭据并代表其请求令牌,但这会将客户端凭据暴露给我的应用程序,这违背了整个概念!

我尝试将客户端访问类型设置为公共,但是当我使用下面的 API 调用时,我也收到错误:

POST /auth/realms/realmname/protocol/openid-connect/tokenAPI 
Run Code Online (Sandbox Code Playgroud)
'grant_type=client_credentials'
'client_id=client_id'
'username=username'
'password=password'
Run Code Online (Sandbox Code Playgroud)
{
    "error": "unauthorized_client",
    "error_description": "Public client not allowed to retrieve service account"
}
Run Code Online (Sandbox Code Playgroud)

有人知道这应该如何完成吗?

提前致谢。

最大限度

openid-connect keycloak

6
推荐指数
1
解决办法
9291
查看次数

标签 统计

keycloak ×1

openid-connect ×1