如何使我的Spring Boot应用程序使用给定的用户名和密码登录到keycloak?

第293章

我有一个spring-boot应用程序,正在使用keycloak对用户进行身份验证。我计划在我的应用程序中创建一个等待用户名和密码的终结点,它登录到密钥斗篷中,并且如果用户名/密码有效,则要求访问令牌并将其返回给用户。

我该如何登录到keycloak?

如我所见,我需要一个public客户端来使我的密钥斗篷使用用户名/密码,但这不包含任何内容,resource_id因此我需要access_token来自confidential客户端的。

我是否应该要求access_token公共客户端提供一个,并且响应代码200是否成功(因此登录成功),然后向confidential客户端发送另一个请求以获取access_token实际有效的信息?

提前致谢。

梦境崩溃

我计划在我的应用程序中创建一个等待用户名和密码的终结点,它登录到密钥斗篷中,并且如果用户名/密码有效,则要求访问令牌并将其返回给用户。

如果您正确配置了Spring App,并且将对您的用户使用的Keycloak客户端进行身份验证Authorization Code Flow即,在Keycloak上启用了标准流),则用户将登录到您的应用程序,重定向到Keycloak并进行身份验证。如果用户成功通过身份验证,则该用户将(可能被重定向回您的应用,并且该应用将获得访问令牌(除其他外)。然后可以使用该访问令牌代表已认证的用户执行操作。

如我所见,我需要有一个公共客户端才能使我的密钥库使用用户名/密码,但这不包含任何resource_id,因此我需要来自机密客户端的access_token。

RFC 6749 OAuth 2.0规范中,可以看到:

机密

  Clients capable of maintaining the confidentiality of their
  credentials (e.g., client implemented on a secure server with
  restricted access to the client credentials), or capable of secure
  client authentication using other means.

上市

  Clients incapable of maintaining the confidentiality of their
  credentials (e.g., clients executing on the device used by the
  resource owner, such as an installed native application or a web
  browser-based application), and incapable of secure client

由于您使用的不是Web浏览器应用程序或移动电话,而是使用具有安全后端的Spring Boot应用程序,因此应使用confidential client

如果您要使用“资源所有者密码凭据授予”即,在Keycloak中启用了直接访问授予”),那么您就混在一起了。您仍然可以与我们一起使用,而无需客户保密。随着public client从Keycloak令牌请求:

POST -d "client_id=<client_id>"
     -d "username=<username>"
     -d "password=user_password"
     -d "grant_type=password"
      <KEYCLOAK_HOST>/auth/realms/<REALM_NAME>/protocol/openid-connect/token>

confidential client:

POST -d "client_id=<client_id>"
     -d "client_secret=<client_secret>"
     -d "username=<username>"
     -d "password=user_password"
     -d "grant_type=password"
      <KEYCLOAK_HOST>/auth/realms/<REALM_NAME>/protocol/openid-connect/token>

你有额外的领域-d "client_secret=<client_secret>"

但是请记住:

资源所有者密码凭据授予类型适用于资源所有者与客户端具有信任关系的情况,例如设备操作系统或高特权应用程序。授权服务器在启用此授予类型时应格外小心,仅在其他流程不可行时才允许它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我正在尝试使用包含Java扫描程序的if / else语句来处理用户名和密码应用程序

如何识别用户名和密码字段以使用Selenium和Python登录到USPS.com

如何使用简单成员资格在MVC 4应用程序中更改用户名和密码

是否可以仅使用用户和密码从我的 .net 核心应用程序登录到 Azure?

我可以使用任何用户名和密码登录到Firebird 3数据库

如何设置NetBeans的Tomcat Manager应用程序用户名和密码?

如何在C#中验证Windows应用程序的咸密码和用户名?

如何使用指纹传感器登录要求用户名和密码的Windows程序?

与登录到其他页面相比,如何检测用户名和密码

如何使用 Graph API 在 Windows 窗体应用程序中显示登录的用户名?

如何使用spring-security通过用户名和密码登录?

我可以使用我的用户名和密码登录到 github,但不能使用 HTTPs 向他们推送代码

我应该使用环境变量还是 module.exports 作为 Heroku 上的小型个人应用程序的用户名和密码?

如何在 .NET Core 控制台应用程序中安全地存储用户名和密码?

如何通过用户名和密码保护在Docker容器中运行的Web应用程序?

在 iOS 中卸载应用程序时如何从钥匙串中删除存储的用户名和密码?

如何使用用户名和密码向Azure REST API进行身份验证(无应用程序ID)

登录问题我可以使用任何用户名和密码登录

我如何使用Spring Security通过ID和密码而不是用户名和密码对用户进行身份验证

我的登录用户名和密码是什么?

我没有输入用户名或密码,当我单击登录按钮时,它强制关闭了我的应用程序

如何使用2或3个用户名和密码以用户形式创建登录名?

如何将我的应用程序中的用户名和密码详细信息存储到我的数据库以及如何将我的应用程序与我的数据库连接?

iOS:如何在应用程序中存储用户名/密码?

Flutter和Firebase-如何仅使用用户名和密码登录

如何创建登录但使用用户名或电子邮件和密码

如何使用登录名(用户名和密码),按钮更改活动?

如何使用WAMP登录phpMyAdmin,用户名和密码是什么?

如何允许客户端使用用户名和密码登录Samba共享?