You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OidcUserService.setAccessibleScopes已弃用,如何改用setRetrieveUserInfo?

解决OidcUserService.setAccessibleScopes弃用后的替代方案

原来的setAccessibleScopes方法用于指定当请求包含哪些scopes时,OidcUserService会去获取UserInfo。现在该方法被弃用,替代方案是使用setRetrieveUserInfo,但核心逻辑不是修改请求的scopes(因为ClientRegistration的scopes是不可修改的配置项),而是通过该方法控制是否触发UserInfo的获取,并确保客户端注册时已配置好所需的scopes。

正确实现步骤:

  1. 在ClientRegistration中配置所需scopes
    首先确保在构建ClientRegistration时已经添加了需要的scopes,而不是在OidcUserService中修改:

    ClientRegistration clientRegistration = ClientRegistration.withRegistrationId("your-reg-id")
            // 其他配置(如clientId、clientSecret、authorizationUri等)
            .scope(OidcScopes.OPENID, OidcScopes.PROFILE, OidcScopes.EMAIL, OidcScopes.ADDRESS, OidcScopes.PHONE)
            .build();
    
  2. 使用setRetrieveUserInfo控制UserInfo获取
    通过setRetrieveUserInfo传入判断逻辑,当请求包含所需scopes时返回true,触发UserInfo的获取:

    final OidcUserService oidcUserService = new OidcUserService();
    oidcUserService.setOauth2UserService(userService);
    // 配置获取UserInfo的条件:当客户端注册的scopes包含所有所需范围时返回true
    oidcUserService.setRetrieveUserInfo(oidcUserRequest -> {
        Set<String> requiredScopes = Set.of(
                OidcScopes.PROFILE,
                OidcScopes.EMAIL,
                OidcScopes.ADDRESS,
                OidcScopes.PHONE,
                OidcScopes.OPENID);
        return oidcUserRequest.getClientRegistration().getScopes().containsAll(requiredScopes);
        // 若只需包含任意一个所需scope就触发获取,可替换为:
        // return requiredScopes.stream().anyMatch(oidcUserRequest.getClientRegistration().getScopes()::contains);
    });
    return oidcUserService;
    

关键说明:

  • ClientRegistration的scopes是初始化时确定的不可修改集合,无法在OidcUserService中动态修改,必须在客户端注册阶段配置完整。
  • setRetrieveUserInfo的核心作用是决定是否发起UserInfo请求,而OidcUserService会自动根据请求的scopes提取对应字段(比如包含EMAIL scope时自动提取邮箱信息),无需额外指定字段范围。

内容的提问来源于stack exchange,提问作者Vladimir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:18:24