iOS Developer的全栈之路 - Keycloak(7)

2020-02-16  本文已影响0人  西西的一天

这一节中,我们来一起看看Keycloak的Identity Brokering。作为一个强大的用户管理服务,这个功能提供了快速集成第三方登录(Google,Facebook,Github等等)和已有Identity Provider的能力。


options.png

在添加了Identity Provider之后,在登录页面就可以看到如下选项:


IDP Login Page.png

工作流程

在后面的示例中,将演示如何集成Google和OAuth0,在演示之前,先来了解一下Identity Brokering的工作流程。下图取自官方文档:


identity broker flow.png
  1. 用户访问某个需要登录后才能访问的服务,并且这个服务已经被Keycloak保护;
  2. 页面将跳转至登录页面;
  3. 登录页面显示除了使用用户名密码登录的其他方式,如上图IDP Login Page所示;
  4. 用户可以选择其中一种登录方式;
  5. 此时Keycloak将向用户所选的Identity Provider发起一个请求进行认证,同时页面也会跳转至该Identity Provider;
  6. 用户在该Identity Provider(例如Google)所提供的认证页面中输入自己的用户名密码,完成认证;
  7. 认证成功后,将再次重定向回Keycloak的页面,同时在response中带有security token。这个token让Keycloak信任认证已经完成,并且Keycloak可以使用这个token从Identity Provider中获取该用户的信息;
  8. Keycloak校验从Identity Provider中获取的用户信息是否有效。当有效时,它会检查这个用户是否已经存在。如果存在,则完成认证;如果不存在,Keycloak将创建一个新用户,首先尝试从第7步中获取的token中解析得到创建新用户所需要的字段,当字段中的信息足够时,便可完成用户创建,若token中的信息不够充分时,将使用这个token向该Identity Provider发起请求获取用户信息。若此时获取的用户信息仍不够充分,则会弹出页面要求用户补全信息,最终完成用户创建。最后,Keycloak将返回给用户一个自己颁发的token。
  9. 当用户在Keycloak中完成了认证操作后,再把用户重定向回用户在第1步时想要访问的服务页面。
  10. 这个服务页面拿到token后,便给用户展示需要授权才可访问的信息。到此便完成了整个的第三方登录的过程。

示例

1. 添加Google Identity Provider

在左边菜单内选择Identity Providers,再在下拉菜单中选择Google,便会出现如下页面:

google identity provider.png
其中,最主要的就是前三个字段:Redirect URI,Client ID 以及 Client Secret。Redirect URI是需要提供给Google的,其他两个字段需要从Google Console中获取。接下来,通过 [Google Developer Console]
(https://console.cloud.google.com/project)创建一个Google Application。
  1. 创建应用

    google console.png
    点击创建应用,输入项目名称,便可完成创建
    create project.png
    创建成功后便会调转至项目首页
    create successfully.png
  2. 配置应用
    进入API和服务 -> OAuth同意屏幕:此处用于配置跳转至Google登录页面将显示的信息。首先Google提示需要选择User Type,此处选择外部,点击继续

    choose user type.png
    OAuth同意屏幕这里只需要输入应用名称即可,由于是测试,千万不要上传应用图片,否则App需要Google审核。
    OAuth consent screen.png
  3. 创建Credential

    选择凭据 -> 创建凭据 -> OAuth客户端ID create credentials.png
    之后选择Web应用
    select web application.png
    便可进入Credential的详情页,这里需要添加一个重定向URI,这个URI就是Keycloak为我们已经准备好的URI。右侧的客户端ID和客户端秘钥也正是Keycloak中所必须得两个字段。 credential detail.png
    填入这个两个字段后如下图所示: google identity provider detail.png

此时,在我们访问http://localhost:8080/auth/realms/demo/account/时,便可看到Google登录的选项了。

2. 添加OAuth0

除了可以集成这些Social平台,也可以集成实现了OpenID Connect协议的Identity Provider,这里我们使用OAuth0作为示例。在Identity Providers中选择OpenID Connect v1.0。进入详情页后,它的必填字段相比Google要多一些,包括了:Alias,Authorization URL,Token URL,Client Authentication 以及和Google相同的Client ID和Client Secret。其中Alias就是个它起个别名,随便填一个即可。
而这些信息都是OAuth0需要提供的,接下来需要在OAuth0注册一个应用

OAuth0 create application.png
创建成功后,便可在Settings页面中看到Client ID和Client Secret app detail.png
在Settings的Application Type中选择Regular Web Application,下方的Allowed Callback URLs也就是Keycloak中的Redirect URI。 app detail 2.png 在这一张截图中包含了另个一字段Token Endpoint Authentication Method,这里我们选择的Post,对应用Keycloak配置中的Client Authentication,它的用意可以参考工作流程中的第8步。
到这里,还差两个必填字段Authorization URL,Token URL,展开OAuth0的Advanced Settings -> Endpoint便可看到这两个字段,对应OAuth0中的OAuth Authorization URL和OAuth Token URL
advanced settings.png
到此为止便完成了OAuth0的集成。由于使用OAuth0登录时,OAuth0无法提供Keycloak创建用户所需的信息,所以在登录后,可以看到如下页面,来补全用户信息:
update user info.png

小结

至此,已完成了Keycloak的Identity Provider功能的讲解,其中没有涉及的字段,大家可以自行参考文档进行理解,下一节将介绍Keycloak的另一个功能:User Federation。

上一篇下一篇

猜你喜欢

热点阅读