将 OAuth2 登录映射到自定义主体

Dav*_*d V 6 java spring spring-security spring-security-oauth2

我们正在试验 Spring Security 5 的新OAuth 2.0 登录功能。通过简单的设置,Spring 创建Authentication名称与 OAuth 2.0 系统中用户 ID 匹配的对象。因此,如果使用 Google 登录,Authentication::getName()则会返回 Google Id。

我们想要使用我们自己的内部 Id,并将 OAuth2.0 提供商的用户 Id 映射到我们自己的用户 Id。例如,我们将获取 Google 用户 ID 并使用它来加载我们自己的 ID。这样做的正确方法是什么?

我们尝试配置 OIDC 用户服务,如下所示。

@Override
protected void configure(HttpSecurity http) throws Exception
{
    http.oauth2Login()
            .userInfoEndpoint()
                .oidcUserService(new MappingOidcUserService());
}
Run Code Online (Sandbox Code Playgroud)

然后我们就可以配置 的值了Authentication::getName()。但这也改变了OAuth2AuthorizedClient::getPrincipalName()我们自己的Id的值。我们希望仍然能够获取外部 Id。这也有点令人担忧这可能会导致什么其他影响。