












sequenceDiagram participant 用户 participant 网站A participant 网站B Note over 用户,网站A: 阶段1: 用户在网站A登录 用户->>网站A: 1. 访问网站A 网站A->>网站A: 2. 检查本地会话(未登录) 网站A->>用户: 3. 重定向到网站A的OIDC授权端点 用户->>网站A: 4. 在网站A登录页面输入凭据 网站A->>网站A: 5. 验证用户凭据 网站A->>网站A: 6. 创建本地会话,生成ID Token 网站A->>用户: 7. 重定向回网站A并设置会话Cookie 用户->>网站A: 8. 访问网站A受保护资源 网站A->>用户: 9. 返回受保护内容 Note over 用户,网站B: 阶段2: 访问网站B,触发SSO 用户->>网站B: 10. 访问网站B 网站B->>网站B: 11. 检查本地会话(未登录) 网站B->>用户: 12. 重定向到网站B的OIDC授权端点 用户->>网站B: 13. 到达网站B授权端点(携带state参数) Note over 网站B,网站A: 网站B作为客户端,网站A作为IdP 网站B->>用户: 14. 重定向到网站A(作为第三方IdP) 用户->>网站A: 15. 到达网站A的第三方授权端点 网站A->>网站A: 16. 检查用户是否已登录(是,跳过登录界面) 网站A->>用户: 17. 显示授权同意页面 用户->>网站A: 18. 用户同意授权 网站A->>用户: 19. 重定向回网站B回调地址(携带授权码) 用户->>网站B: 20. 到达网站B回调地址 网站B->>网站A: 21. 用授权码请求Token(后端通信) 网站A->>网站B: 22. 返回ID Token、Access Token 网站B->>网站B: 23. 验证ID Token签名 网站B->>网站A: 24. (可选)调用UserInfo端点 网站A->>网站B: 25. 返回用户信息 网站B->>网站B: 26. 创建本地会话,关联网站A用户 网站B->>用户: 27. 设置网站B会话Cookie 用户->>网站B: 28. 访问网站B受保护资源 网站B->>用户: 29. 返回受保护内容
开放OIDC端点
https://site-a.com/oauth/authorizehttps://site-a.com/oauth/tokenhttps://site-a.com/oauth/userinfohttps://site-a.com/.well-known/jwks.jsonhttps://site-a.com/.well-known/openid-configuration客户端注册
用户映射
sub claim映射)安全配置
OIDC客户端配置
Token验证
用户会话管理
前端配置
{
"issuer": "https://site-a.com",
"authorization_endpoint": "https://site-a.com/oauth/authorize",
"token_endpoint": "https://site-a.com/oauth/token",
"userinfo_endpoint": "https://site-a.com/oauth/userinfo",
"jwks_uri": "https://site-a.com/.well-known/jwks.json",
"scopes_supported": ["openid", "profile", "email"],
"response_types_supported": ["code"],
"subject_types_supported": ["public"]
}
{
client_id: "site-b-client-id",
client_secret: "site-b-client-secret",
redirect_uri: "https://site-b.com/auth/callback",
authorization_endpoint: "https://site-a.com/oauth/authorize",
token_endpoint: "https://site-a.com/oauth/token",
userinfo_endpoint: "https://site-a.com/oauth/userinfo",
jwks_uri: "https://site-a.com/.well-known/jwks.json",
scope: "openid profile email"
}
通过上述流程,用户在网站A登录后,访问网站B时可以无需重新输入凭据即可登录,实现了跨站的单点登录体验。这种方式适用于两个独立系统需要共享用户认证状态,但又希望保持各自用户体系独立性的场景。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。