keycloak~作为第三方登录的对接标准

当某些合作商希望把你的keycloak作为他们的一种第三方登录方式时,就像微信,google,github,使用你的keycloak上的账户资源时,你就需要考虑如何做一个开放的,标准的文档了。

一 基本角色

  • 认证提供者:keycloak服务,https://kc.xxx.com
  • 第三方应用:先到keycloak上注册,由keycloak颁发client_id和client_secret,并与第三方应用确定好callback回调地址。
  • 用户:使用keycloak服务完成登录,然后去访问第三方应用,当然也可以访问对接到keycloak上的所有服务资源。

二 接入流程

1 向keycloak管理员提供第三方应用基本信息,应用名称,回调地址,管理员添加好之后,连同client_id和client_secret告诉第三方应用。

2 在第三方应用中,添加法宝登录链接,例如:

<a href="https://kc.xxx.com/auth/realms/fabao/protocol/openid-connect/auth?client_id=aaa&redirect_uri=http://localhost:8080/callback%3Fredirect_uri%3Dhttp%3A%2F%2Flocalhost%3A8080%2Fhello&response_type=code&scope=openid">kc登录</a>
  • 客户端ID client_id=aaa
  • 授权类型 response_type=code
  • scope类型 scope=openid
  • 三方应用的回调地址 redirect_uri

注意:您在对接时,需要对redirect_uri参数进行urlencode编码。

3 登录成功后,keycloak会根据你的回调地址,重定向到你的系统中,并带着code和redirect_uri及session等信息。
http://localhost:8080/callback?redirect_uri=http://localhost:8080/hello&session_state=45691669-f290-4991-8f43-d6c411a91b7c&code=b3921500-f6a6-494d-ad23-41b75c436fe7.45691669-f290-4991-8f43-d6c411a91b7c.02bb9b29-2c53-45c7-b009-43e3c78c6aff

  • 三方应用系统的回调地址:redirect_uri
  • 授权码:code
  • 会话标识:session_state

三 获取用户信息

在三方应用自己的callback接口里,可以进行用户的映射与持久化,你可以通过传过来的code来获取当前用户在keycloak平台的access_token,然后你再根据access_token获取用户基本的开放的信息,你可以将这个用户信息保存到应用的本地数据库,当然也可以与你现有用户进行绑定。
1 通过code来获取access_token:/auth/realms/xxx/protocol/openid-connect/token

响应内容为access_token和refresh_token

2 通过access_token来获取用户信息,正常返回200,如果是返回401,你需要从新获取
获取用户信息:/auth/realms/xxx/open/userinfo

{
    "nickname": "张三",
    "userId": "347c9e9e-076c-45e3-be74-c482fffcc6e5",
    "username": "test"
}

3 当三方应用通过keycloak的接口获取到了用户信息之后,您就可以与本地账号进行映射了,一般的做法是这样的,如图:

四 认证流程

posted @   张占岭  阅读(1154)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2020-05-20 k8s~fluentd的configmap设置es索引前缀
2020-05-20 springcloud~服务发现之k8s服务
2016-05-20 爱上MVC~图表的使用Chart
2016-05-20 Jquery~$when_done_then的用法
2014-05-20 MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength
2012-05-20 基础才是重中之重系列~目录(永久更新中)
2011-05-20 看看MSDN上是怎么说委托的!它没有什么神秘的,说它神秘是因为你没有仔细看去...
点击右上角即可分享
微信分享提示