OIDC的UserInfo端点

OIDC的UserInfo端点

OIDC是OAuth2的一个扩展,用于获取用户信息,如用户名、邮箱等,获取其他定制的用户信息需要自定义 UserInfo 端点。

1.UserInfo 端点谁调用:

/userinfo 由 OIDC 客户端(RP) 调用,不是浏览器、也不是资源服务器。在你们的架构里就是 BFF(inventory-app / order-app),

以服务端到服务端方式带着 Access Token 调用:

复制代码
GET {issuer}/userinfo
Authorization: Bearer <access_token>

2.UserInfo 端点什么时候调用:

时机 1:OIDC 登录流程中(最常见)

授权码流程换完 token 之后,客户端如果想补充用户资料,就会调一次。如果 BFF 用的是 Spring Security 的 oauth2Login(),框架的

OidcUserService 会在登录处理时自动调它------条件是:Provider 元数据(/.well-known/openid-configuration)里声明了 userinfo 端点

请求的 scope 包含 openid + profile/email/address/phone 之一调回来的 claims 会合并进 OidcUser,用于建立登录会话。

时机 2:按需随时调用

端点不会主动推送,客户端任何时候需要用户资料都可以调,典型场景:只有 Access Token、没有 ID Token 的纯 OAuth2 场景需要比 ID Token 更

全/更新的资料(ID Token 只是签发时刻的快照)前端 SPA 登录后拉取用户 profile 展示

当前实际状况:

项目使用的是 Spring Authorization Server 通过 .oidc(Customizer.withDefaults()) 启用的默

认 UserInfo 端点(/userinfo)。默认行为是从 ID Token 的 claims 中返回用户信息。而你的定制用户信息(tenant_id、

tenant_code、tenant_name、roles)是通过 jwtTokenCustomizer() 直接写入 ID Token 的,并没有走 UserInfo 端点。由于默

认 UserInfo 端点会从 ID Token claims 取值,这些定制信息也会随默认 /userinfo 端点返回。

如果将来需要完全自定义 UserInfo 返回内容(例如按 scope 过滤、增加新字段),才需要提供自定义的 OidcUserInfoMapper Bean。

相关推荐
jason.zeng@15022071 小时前
(七)「固化 Rest 接口 + Text-to-SQL 灵活查询」双模式 Agent 架构教程
数据库·python·sql·ai·架构·langchain·ai编程
Wang's Blog1 小时前
Java框架 SpringCloud 快速入门: Nacos 配置管理之添加配置与 dataId 命名规范
java·开发语言·spring cloud
JAVA面经实录9171 小时前
Java高级后端 · 全套面试通关手册(Nginx)
java·nginx·面试
阿俊-全栈开发1 小时前
LikeShop单商户Java商城如何从容承接高并发流量?
java·开发语言·spring boot·spring·系统架构
Java小白笔记1 小时前
Java 函数式接口1:从无参任务到自定义多参数查询
java·windows·python
天空鸟_时光不老1 小时前
01-我不转Python把AI塞进Java里
java·人工智能·spring boot·后端·spring·spring cloud·架构
行者全栈架构师1 小时前
【鸿蒙心迹】ArkUI 列表性能实战——为什么 200 条数据页面掉到 20fps,LazyForEach 怎么救(HarmonyOS 7.x)
前端·算法·架构
vx_Biye_Design1 小时前
flask学生课程笔记共享系统29026-计算机课程设计、毕业设计
java·javascript·spring boot·后端·elasticsearch·flask·课程设计
代码山河2 小时前
JDK、JRE、JVM的区别:一文讲清楚Java运行环境
java·学习·架构·教程·面向对象·项目