我无法为以下要求找到有效的解决方案。
一个。使ios / android用户能够注册到我们的应用程序。使用自定义注册过程,因为需要照片ID。
湾如果获得批准,请使用创建的帐户登录并访问后端api(在springboot中制作)。
℃。不允许使用facebook或google等外部身份提供商。
我发现的最适合我们的微服务设计的产品是 keycloak 。但是,文档确实缺乏,并且没有发现这个实现的好例子。
Screenshot of creating keycloak identity provider
所以我使用 keycloak 和ios的 aerogear 进行了一些配置,并提出以下问题。
由于这不是基本身份验证,我认为所需的流程是授权代码流。但是,documentation表示"这些IDP必须支持授权代码流"但是,这是什么意思?因为这不在任何地方的密钥泄露设置中。
一旦用户通过此流程内的密钥泄露或外部数据库,用户将在何处存储?
目前,流程设置为"第一个经纪人登录"但是这会给应用程序带来错误,无效的重定向网址。
答案 0 :(得分:1)
我目前正在研究类似的用例。我有4个不同的身份验证方法。我尝试开发自定义用户联合和自定义身份提供程序。我对keycloak的经验不多,但我可以提出自己的意见。
检查Keycloak自定义用户联合
这意味着,在Keycloak用户名/密码登录时使用diffirent数据源(或进程)
参见=>
检查自定义身份提供商
这意味着,将身份验证过程委托给外部身份提供商。
如果我理解了您的用例,您希望自己管理身份验证过程(使用自定义页面或自定义流程)。
如果我理解正确,您需要将身份验证过程委派给您的自定义服务。因此,您需要开发自定义提供程序(或小型虚假提供程序服务),并且需要将此提供程序配置为keycloak作为openid connect。
对于1 => 是,您将使用授权代码流。您可以从官方页面阅读openid connect,但我建议您必须查看此页面https://connect2id.com/learn/openid-connect。阅读本文后,您可以清楚地了解openid connect和授权代码流程。
创建授权代码流
有两种主要方法(服务终点)(用于原始提供商)配置这些服务时 终点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 format)see again link.
的200条消息如果您正确创建此流程,Keycloak将接受您的用户并在其自己的上下文中进行身份验证。
For 2 => 在配置身份提供程序(openid connect)时,您将选择First Login Flow。这意味着,当Keycloak不包含用户时,他们接受此用户,但是,它会询问您所需的信息,如firstname,email,lastname。您可以在access_token中发送名字和姓氏(在access_token响应中的jwt =>中声明)
Keycloak会将此用户插入自己的数据库。
对于3 => 我在配置错误的重定向网址时采用了无效的重定向网址异常。确保您的应用程序域地址与配置的客户端地址相同。
我希望这些信息对你有用。