我可以检查用户名和密码在 Keycloak 中是否有效吗?

Can I check if the userid and password are valid in Keyclock?

用户将其 ID 和密码发送给我。 然后我想检查它在密钥斗篷上是否有效。 我可以尝试登录,但会话是在 keycloak 中创建的。

登录后还想过退出。 但是这样效率很低。

有没有办法在不创建会话的情况下检查 id 和 passwd 是否有效? 如果有这种方法,我的任务就很简单了。

如果没有办法,我必须代替我的用户登录并管理令牌。 这个实现起来相对比较复杂。

据我所知out-of-the-box无法避免创建该部分。

If there is no way, I have to log in instead of my user and manage the token instead. This is relatively more complex to implement.

不一定,因为密码和用户名已交给您的应用程序,您可以使用以下方法:

  • 在 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 最终清理会话。