有没有办法在不使用其 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、移动设备)获取令牌。为了简单起见,这里我使用curl
和jq
:
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?