有没有办法在不使用其 UI 的情况下使用 KeyCloak 身份验证?

Posted

技术标签:

【中文标题】有没有办法在不使用其 UI 的情况下使用 KeyCloak 身份验证?【英文标题】:Is there any way to use KeyCloak authentication without using its UI? 【发布时间】:2019-07-22 00:22:45 【问题描述】:

所以,我正在构建一个 API 系统。我想使用 KeyCloak 进行身份验证和用户管理,因为它有一个很好的访问控制。我正在将它与 Ktor 集成,我希望我的用户使用他们自己的 UI。或者至少,我想做 UI。

我读过关于主题定制的文章,但这不是我想要的。我还了解到 KeyCloak UI 紧密集成在他们的代码中。我只是希望知道至少当其中一个客户端应用程序是移动应用程序时,我是否可以将例如 android UI 用于整个登录流程?

如果不可能(我认为不太可能),是否有任何其他用于访问控制的库或框架,最好是与 Ktor 一起使用的库或框架?

【问题讨论】:

想知道您是如何解决问题的吗?我现在也面临着类似的情况。 @ystark 我知道有些流程不需要 UI。 【参考方案1】:

如果您不想使用 Keycloak UI 也不想创建自己的自定义主题,您可以利用 Resource Owner Password Credentials Grant 流程。

为此创建一个新的或使用现有的confidential 客户端。确保将Direct Access Grants Enabled 开关切换到ON。

之后,从您的客户端(网页、CLI、移动设备)获取令牌。为了简单起见,这里我使用curljq

KCHOST=https://yourkeycloak.com
REALM=your-realm
CLIENT_ID=your-confidential-client
CLIENT_SECRET=xxxxxxx-yyyyyyyy-zzzzzzzzz

ACCESS_TOKEN=`curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "grant_type=client_credentials" \
  "$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

附:为了调试,我创建了一个名为 brauzie 的 CLI 工具 可以帮助您获取和分析您的 JWT 令牌(范围、角色等)。它可能 可用于公共和机密客户。你也可以 使用邮递员和https://jwt.io

HTH :)

【讨论】:

这不是 Client Credentials Grant 流而不是 Resource Owner Password Credentials Grant 流,在这种情况下 grant_type 必须是 password 但在你的情况下是 client_credentials 。此外,在您提到的请求中,没有关于我们要以哪个用户身份登录的信息。在此处查看规范tools.ietf.org/html/rfc6749#section-4.3【参考方案2】:

您还可以按照here 的说明使用 Keycloak Admin Client。

【讨论】:

Admin Client 允许执行管理操作 - 这不是 OP 想要的。可以使用此 API 创建或删除用户,但无法对用户 AFAICT 进行身份验证。

以上是关于有没有办法在不使用其 UI 的情况下使用 KeyCloak 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不使用 PHP 或 JavaScript 的情况下让 textarea 拉伸以适应其内容?

有没有办法在不导入 csv 的情况下从 .csv 创建 JSON?

我可以在不使用其 UI 框架的情况下将 Qt 用作 C++ 库吗

有没有办法在不使用 XDocument 的情况下将新的 xml 数据附加到 xml 文件中的现有 xml?

有没有办法在不显示窗口的情况下使用 cv2.waitkey() ?

有没有办法在不使用mod_rewrite和.htaccess的情况下重写我的网址?