创建openid连接身份提供程序以保护其他API

时间:2018-03-21 10:49:23

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

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

一个。使ios / android用户能够注册到我们的应用程序。使用自定义注册过程,因为需要照片ID。

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

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

我发现的最适合我们的微服务设计的产品是 keycloak 。但是,文档确实缺乏,并且没有发现这个实现的好例子。

Screenshot of creating keycloak identity provider

所以我使用 keycloak 和ios的 aerogear 进行了一些配置,并提出以下问题。

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

  2. 一旦用户通过此流程内的密钥泄露或外部数据库,用户将在何处存储?

  3. 目前,流程设置为"第一个经纪人登录"但是这会给应用程序带来错误,无效的重定向网址。

1 个答案:

答案 0 :(得分:1)

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

检查Keycloak自定义用户联合

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

参见=>

  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
  3. 检查自定义身份提供商

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

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

    如果我理解正确,您需要将身份验证过程委派给您的自定义服务。因此,您需要开发自定义提供程序(或小型虚假提供程序服务),并且需要将此提供程序配置为keycloak作为openid connect。

    对于1 => 是,您将使用授权代码流。您可以从官方页面阅读openid connect,但我建议您必须查看此页面https://connect2id.com/learn/openid-connect。阅读本文后,您可以清楚地了解openid connect和授权代码流程

    创建授权代码流

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

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

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

    在您的流程(如果是有效用户)之后,您需要创建代码(必须是唯一的  像uuid,您需要将您的身份验证信息存储在缓存或地图上=> 密钥是代码值是您的数据)您需要使用身份验证代码和状态参数将redirect(302或303)重定向到redirect_url。 (您需要存储此代码,这是必需的。)

    重定向后,Keycloak会直接调用您的/ token并指向代码 client_id,client_secret ...(client_id和client_secret等参与者安全性的参数),您将在阅读link.后了解

    您需要使用代码匹配您的身份验证数据,并且必须回复包含access_token和refresh_token(in jwt formatsee again link.

    的200条消息

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

    For 2 => 在配置身份提供程序(openid connect)时,您将选择First Login Flow。这意味着,当Keycloak不包含用户时,他们接受此用户,但是,它会询问您所需的信息,如firstname,email,lastname。您可以在access_token中发送名字和姓氏(在access_token响应中的jwt =>中声明)

    Keycloak会将此用户插入自己的数据库。

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

    我希望这些信息对你有用。