【问题标题】:Creating an openid connect identity provider to secure rest APIs创建一个 openid 连接身份提供程序以保护其余 API
【发布时间】:2018-03-21 10:49:23
【问题描述】:

我无法为以下要求找到有效的解决方案。

一个。让 ios/android 用户能够注册到我们的应用程序。使用自定义注册流程,因为需要带照片的身份证件。

b.如果获得批准,请使用创建的帐户登录并有权访问后端 api(在 springboot 中制作)。

c。不允许使用 facebook 或 google 等外部身份提供商。

我发现最适合我们微服务设计的产品是 keycloak。但是,文档确实缺乏,也没有找到很好的实现示例。

Screenshot of creating keycloak identity provider

所以我通过 keycloakaerogear for ios 进行了一些配置,并有以下问题。

  1. 由于这不是基本身份验证,我认为所需的流程是授权代码流程。但是,documentation 中说“这些 IDP 必须支持授权代码流”但是这是什么意思?因为这不在任何地方的 keycloak 设置中。

  2. 用户通过此流程后将存储在哪里 - 在 keycloak 内部还是在外部数据库中?

  3. 当前流程设置为“首次代理登录”,但这会导致应用出错,重定向 url 无效。

【问题讨论】:

    标签: spring-security-oauth2 openid-connect keycloak openid-provider


    【解决方案1】:

    我目前正在研究类似的用例。我有 4 种不同的身份验证方法。我尝试开发自定义用户联合和自定义身份提供者。我对keycloak没有太多经验,但我可以提出我的意见。

    检查 Keycloak 自定义用户联合

    这意味着,Keycloak 用户名/密码登录时使用不同的数据源(或进程)

    见 =>

    1. http://www.keycloak.org/docs/3.0/server_development/topics/user-storage/simple-example.html
    2. https://tech.smartling.com/migrate-to-keycloak-with-zero-downtime-8dcab9e7cb2c

    检查自定义身份提供者

    这意味着,将身份验证过程委托给外部身份提供者。

    如果我正确理解了您的用例,您希望自己管理身份验证过程(使用自定义页面或自定义流程)。

    如果我理解正确,您需要将身份验证过程委托给您的自定义服务。所以你需要开发一个自定义的provider(或者一个小的假provider service)并且你需要把这个provider配置成keycloak as openid connect。

    For 1 => 是的,您将使用授权码流程。您可以从官方页面阅读 openid connect,但我建议您必须检查此页面https://connect2id.com/learn/openid-connect。看完这篇,你就可以清楚的了解openid connect和授权码流程了。

    创建授权代码流

    有两种主要方法(服务端点)(用于原始提供商)
    • /认证
    • /令牌 您将在link. 上看到所需的参数

    当您配置这些服务时 keycloak 的端点 url (参见 => http://www.keycloak.org/docs/3.3/server_admin/topics/identity-broker/oidc.html)

    Keycloak 会在登录页面上显示一个按钮。 Keycloak 将重定向到您的 /auth 服务端点,并使用所需的参数,如 redirect_url、scope.. 使用此按钮帮助。 (您需要将此参数存储到会话或缓存中,因为它们将在授权代码流程的下一步中需要)现在您可以应用自定义身份验证过程。

    在您的流程之后(如果是有效用户),您需要创建一个代码(必须是唯一的 像 uuid 并且您需要将您的身份验证信息存储在缓存或地图上 => key is code value is your data)您需要使用身份验证代码和状态响应重定向(302 或 303)到 redirect_url参数。 (您需要存储此代码,它将是必需的)。

    重定向 Keycloak 后直接调用 /token 并使用 code client_id、client_secret 等参数指向...(client_id 和 client_secret 用于您的提供商安全,阅读link. 后您将了解)

    您需要使用 code 匹配您的身份验证数据,并且您必须响应包含 access_token 和 refresh_token (in jwt format) see again link. 的 200 消息

    如果您创建此流程权限,Keycloak 将接受您的用户并在其自己的上下文中进行身份验证。

    对于 2 => 您将在配置身份提供者 (openid connect) 时选择首次登录流程。这意味着,当 Keycloak 不包含用户时,他们接受该用户,但它会询问您所需的信息,如名字、电子邮件、姓氏。您可以在 access_token 中发送名字和姓氏(作为 jwt => 在 access_token 响应中的声明)

    Keycloak 将把这个用户插入它自己的数据库。

    For 3 => 当我配置错误的重定向 url 时,我采取了无效的重定向 url 异常。确保您的应用程序域地址与配置的客户端地址相同。

    希望这些信息对你有用。

    【讨论】:

      猜你喜欢
      • 2020-05-06
      • 2014-02-18
      • 1970-01-01
      • 2016-11-18
      • 2016-04-18
      • 1970-01-01
      • 2022-08-04
      • 2018-10-31
      • 2018-01-19
      相关资源
      最近更新 更多