Łuk*_*ski 6 java oauth-2.0 openid-connect keycloak idp
我想使用“直接访问授权”对 KeyCloak 进行身份验证: https: //www.keycloak.org/docs/latest/server_admin/index.html#resource-owner-password-credentials-grant-direct-access-grants
当 keycloak 自己管理用户和密码时,我的工作就像一个魅力。
但是,我的情况有所不同:
我希望 keycloak 充当某些外部 IDP 的经纪人。KeyCloak 具有身份代理功能 - 但仅适用于“授权代码流程” - 将用户重定向到外部 IDP 登录表单。我有移动应用程序,希望使用“直接访问授权” - 以便应用程序与 keycloak 通信来验证用户 - 并且 keycloak 作为代理,在外部 IDP 中验证此用户(使用 openid-connect)
如何实现这样的场景?我知道这是不可能的 - 但也许有人可以建议如何编写 keycloak 的扩展来使这种情况成为可能?
G_H*_*G_H 11
无论您想以这种方式实现什么目的,它都直接违背了 OAuth 和 OpenID Connect 的设计目的。使用访问令牌的整个想法是允许某些依赖方(例如移动应用程序)代表用户与服务进行交互,而无需查看用户的凭据(例如密码)。
这样想吧。假设您的手机上有一些应用程序。它可以使用 Google 的某些服务。为此,它会要求您使用 Google 登录并授予应用程序访问权限。现在,您想通过将您的 Google 电子邮件和密码直接输入应用程序来实现吗?当然不是。这可以让它完全控制你的谷歌帐户、使用你的谷歌身份的其他应用程序和网站,可能还包括允许你通过谷歌钱包支付的服务……简单地将你的谷歌登录信息交给一些手机应用程序是疯狂的。
因此,使用 OAuth2 或 OpenID Connect,您可以使用授权代码流或隐式流将用户重定向到身份提供商(在我们的示例中为 Google),他们将在其中完成登录过程,然后身份提供商重定向回应用程序或具有可兑换令牌的授权代码的站点,或者对于隐式流程,可兑换令牌本身。
现在,当您自己的应用程序和您自己的身份提供商(如 Keycloak)在您的控制之下时,这并不重要。您可以使用直接授权让用户在应用程序中输入用户名和密码,因为您知道它不会试图窃取用户凭据来恶意使用您的服务。他们都在你的控制之下。在这种情况下,OAuth 或 OIDC 有点矫枉过正,但您可以拥有单独的客户端来进行直接授权(您自己的应用程序)和授权代码流(使用您的服务的第三方应用程序)。然而,当您想要使用 Keycloak 身份代理时,Google 或 Facebook 等外部身份提供商不会提供直接授权并邀请应用程序窃取其用户的凭据。所以你将无法以这种方式与他们互动。
根据您想要实现的目标,您可能会在代币交换过程中找到一些用处。但是,如果您希望用户在您的应用程序中使用其外部身份提供商凭据登录,而不需要重定向...则不要这样做。
小智 1
您是否坚持使用直接访问授权作为移动应用程序中的用户身份验证方法?在我看来,当 IDP 是第三方服务时,您需要使用授权代码流,因为它不会提供 API 来验证用户身份,即使使用您自己的(第一方)IDP,最好使用授权代码流程如OAuth 2.0 安全最佳当前实践第 2.4 节中所述。
要在移动应用程序中实施授权代码流,您需要使用应用程序内浏览器选项卡来显示 IDP 提供的登录屏幕。有关详细信息,请参阅RFC 8252:适用于移动和本机应用程序的 OAuth 2.0 。
| 归档时间: |
|
| 查看次数: |
16552 次 |
| 最近记录: |