【发布时间】:2022-12-25 19:51:35
【问题描述】:
用户将其 ID 和密码发送给我。 然后我想检查它在密钥斗篷上是否有效。 我可以尝试登录,但会话是在 keycloak 中创建的。
我什至想过登录后退出。 但这是非常低效的。
有没有办法在不创建会话的情况下检查 ID 和密码是否有效? 如果有这样的方法,我的任务就很容易了。
如果没有办法,我必须代替我的用户登录并管理令牌。 这实现起来相对更复杂。
【问题讨论】:
标签: keycloak keycloak-rest-api
用户将其 ID 和密码发送给我。 然后我想检查它在密钥斗篷上是否有效。 我可以尝试登录,但会话是在 keycloak 中创建的。
我什至想过登录后退出。 但这是非常低效的。
有没有办法在不创建会话的情况下检查 ID 和密码是否有效? 如果有这样的方法,我的任务就很容易了。
如果没有办法,我必须代替我的用户登录并管理令牌。 这实现起来相对更复杂。
【问题讨论】:
标签: keycloak keycloak-rest-api
据我所知,没有办法避免创建会话。
如果没有办法,我必须代替我的用户登录并管理 代币代替。这实现起来相对更复杂。
不是真的,因为密码和用户名已交给您的应用程序,您可以使用以下方法:
- 在 Keycloak 中创建一个启用直接大访问流的客户端(在适当的领域中)(在 OAuth2 中称为 Resource Owner Password Flow);
- 将该客户端的访问令牌设置为非常短暂的生命(例如。,等一下)。
使用用户名和密码向客户端发出 POST 请求,如下所示:
curl --request POST --url "http://$KEYCLOAK_HOST/auth/realms/$REALM_NAME/protocol/openid-connect/token" --data client_id=$CLIENT_ID --data username=$USERNAME --data password=$PASSWORD --data grant_type=password如果您返回令牌作为响应,则意味着用户凭据有效,否则这些凭据无效。
如果您取回令牌,您可以显式注销会话,例如如下所示:
ACCESS_TOKEN=$(echo $TOKEN | jq -r .access_token) SESSION_STATE=$(echo $TOKEN | jq -r .session_state) curl -k -X DELETE "http://$KEYCLOAK_HOST/auth/admin/realms/master/sessions/$SESSION_STATE" -H "Content-Type: application/json" -H "Authorization: Bearer $ACCESS_TOKEN"或者由于访问令牌的生命周期很短,让 Keycloak 最终清理会话。
【讨论】: