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的接口获取到了用户信息之后,您就可以与本地账号进行映射了,一般的做法是这样的,如图:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.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上是怎么说委托的!它没有什么神秘的,说它神秘是因为你没有仔细看去...