1. 简介
为了使用keycloak实现对多个客户端(应用程序)的管理,实现一个账号处处登录。本文尝试梳理一下什么是“授权码模式”,及应该怎么理解。
keycloak的访问模式有两种:
一. 授权码模式
二. 隐藏模式
本文只讲我个人理解的授权码模式是怎样运行的
2. 网上的调查资料
后面统一用以下概念来说明:
EU(用户,End User):实际操作浏览器的用户
RP(客户端,Relying Party):用于提供服务的(开发的)应用程序
OP(服务器,OpenID Provider):通过keycloak管理的一组客户端(可以一个账号处处登录的管理账号的服务器)。
网上查看的资料大多是下面这种逻辑,对于初次接触keycloak和OIDC的我来说很难实际理解。(大家可以尝试理解一下)
① RP(客户端)向 OP(服务器)发送请求。
② OP(服务器)对 EU(用户)进行身份验证。
③ OP(服务器)发送 ID 令牌响应到 RP(客户端),通常是访问令牌。
④ RP(客户端)发送 ID访问令牌的请求。向 OP(服务器)索要用户实际数据。
⑤ OP(服务器)的用户实际数据 返回 RP(客户端)有关 EU(用户)的 信息。
3. 通过实践调查后实际运行机制
(1). 调查前的准备
首先我在本地搭建了一个Keycloak运行环境,可以参照
(5条消息) Keycloak本地服务器搭建_凯尔萨厮的博客-CSDN博客_keycloak
或者(5条消息) 本地keycloak15.1.0下载安装配置启动_凯尔萨厮的博客-CSDN博客_keycloak 安装
然后准备两个可运行的WEB应用程序
怎样域keycloak做代码关联参照(5条消息) keycloak项目代码_凯尔萨厮的博客-CSDN博客
后面说明为(客户端1,客户端2)
(2). 说明开始
1. 用户(输入url) 访问 客户端1
2. 【客户端】 用预留信息 拼接成 新URL地址 将 用户 重定向到【服务器】(用户感受不到这个操作,这里涉及到跨域访问,需要自行在客户端代码进行配置)
URL例:服务器根URL/auth/realm/域名/client/客户端名(仅作参照)
3. 【服务器】通过URL得知(域名)和(客户端名)过来的请求后,验证【用户】为未登录状态,为【用户】展现 登录页面
4. 【用户】输入用户名密码对【客户端】授权
5. 【服务器】预留cookie信息到浏览器,同时 将用户 重定向回【客户端】同时发送【授权码】给客户端
6. 【客户端】通过【授权码】向【服务器】索要【访问令牌】
7. 【客户端】通过【访问令牌】向【服务器】索要【实际用户数据】
8. 【客户端】为用户展现 带着【用户数据】的页面
9. 用户【客户端1】登录状态 访问 【客户端2】同上记步骤1一样(这之后是一键登录的实现流程)
10. 【客户端2】 用预留信息 拼接成 新URL地址 将 用户 重定向到【服务器】同上记步骤2一样
11. 【服务器】通过URL得知(域名)和(客户端名),进行用户登录认证同上记步骤3一样
先获取服务器在浏览器里的Cookie信息(只有服务器能获取,客户端不能跨域访问Cookie)
【服务器】认证Cookie信息,确认【用户】是登录状态,跳过上记步骤4,直接进行步骤5.
后面处理就同步骤6,7,9一样了。