Spring Boot/Security能否结合Oauth2/OpenId Connect对接自定义认证服务器?
对接自定义自研OAuth2/OIDC认证服务器的实现逻辑
很多教程只演示谷歌、GitHub这类公共平台登录配置,其实是因为Spring Security 5+ 内置了这些平台的元数据预置规则,并非只支持这类第三方公共服务。只要你部署的自研认证服务器完全符合OAuth2、OpenID Connect(OIDC)规范,只需要把内置的公共平台配置替换为自研服务的对应参数,就能正常完成对接,核心调整逻辑如下:
配置层的核心调整
之前教程中出现的google这类标识,是Spring Security预留的内置注册项ID,系统会自动匹配预置好的谷歌认证服务器的端点地址。对接自研服务时,只需要自定义注册项标识,手动关联自研认证服务器的端点信息即可,参考配置如下:
spring: security: oauth2: client: registration: # 自定义注册标识,可任意命名,不需要沿用google/github这类内置名称 internal-idp: client-id: "自研认证服务器分配给当前应用的客户端ID" client-secret: "自研认证服务器分配给当前应用的客户端密钥" # 标准授权码登录流程,和公共平台登录的流程逻辑完全一致 authorization-grant-type: "authorization_code" # 回调地址模板,最终拼接为当前应用的登录回调路径,需和认证服务器侧配置的允许回调地址完全匹配 redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" # 申请的权限范围,需和认证服务器给当前应用开放的范围一致,基于OIDC规范一般要包含openid scope: "openid,profile,email" provider: # 和上面的自定义注册标识一一对应,配置自研认证服务器的核心信息 internal-idp: # 如果自研认证服务器实现了OIDC标准的元数据自动发现能力,只需要配置issuer-uri即可 # Spring Security会自动拉取`{issuer-uri}/.well-known/openid-configuration`下的所有端点、签名公钥等配置,无需手动逐行填写 issuer-uri: "http://你的自研认证服务器部署根地址" # 若不支持自动发现,需手动逐行配置所有核心端点,替代上面的issuer-uri # authorization-uri: "http://你的自研认证服务器/oauth2/authorize" # token-uri: "http://你的自研认证服务器/oauth2/token" # user-info-uri: "http://你的自研认证服务器/oauth2/userinfo" # jwk-set-uri: "http://你的自研认证服务器/oauth2/jwks" # user-name-attribute: "sub"
落地时的注意要点
- 注册项的自定义标识、对应provider的配置标识必须完全一致,否则Spring Security会匹配不到对应配置,抛出找不到客户端配置的错误
- 自研认证服务器的端点路径必须严格遵循OAuth2/OIDC规范定义,否则会出现流程跳转404、参数不匹配的报错
- 必须在自研认证服务器侧提前注册当前应用的客户端信息,包括客户端ID、密钥、允许的回调地址、开放的权限范围,否则授权环节会被服务端拒绝
- 若自研认证服务器暂未实现OIDC的ID Token签名、JWK公钥端点能力,需要自定义对应配置逻辑关闭强校验规则,避免因为验签不通过拦截登录流程
本质上对接自定义认证服务器的流程和对接谷歌、GitHub等公共平台的流程完全一致,差异仅在于公共平台的配置是Spring Security内置预置的,自研平台的配置需要开发者自行补充元数据即可。
内容的提问来源于stack exchange,提问作者stackstack293
相关产品推荐
相关产品推荐

