spring oauth 客户端中 OIDC 和 OAuth2 的区别

问题描述 投票:0回答:1

我的目标是通过身份验证服务(如 google 或 github)对用户进行身份验证。

我尝试同时使用两者,但我不明白为什么在 github 上我的身份验证是用我的 OAuth2UserService 处理的,而在 google 上,这是我的 OidcUserService 被调用。

我希望两者都调用 OidcUserService,因为我只需要身份验证。

那么,为什么会有这样的差异呢? 你能告诉我这个吗? 我是不是错过了什么?

一些代码来说明

@Service
public class CustomOAuth2UserService extends DefaultOAuth2UserService {

    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {

        OAuth2User user = super.loadUser(userRequest);

        log.info("OAuth2User loading");

        return user;
    }
}
@Service
public class CustomOidcUserService extends OidcUserService {

    @Override
    public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2AuthenticationException {

        OidcUser user = super.loadUser(userRequest);

        log.info("OidcUser loading");

        return user;
    }
}
// MyAppSecurityConfig.java
@Configuration
public class MyAppSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .oauth2Login()
        ;
    }
}
# application.properties
spring.security.oauth2.client.registration.github.client-id=xxxx
spring.security.oauth2.client.registration.github.client-secret=xxx

spring.security.oauth2.client.registration.google.client-id=xxxx
spring.security.oauth2.client.registration.google.client-secret=xxxx
java spring oauth-2.0 openid-connect
1个回答
1
投票

您观察到的行为是由 spring-boot 中预定义的 oauth2 配置引起的:

对于常见的 OAuth2 和 OpenID 提供商,包括 Google、Github、 Facebook 和 Okta,我们提供了一组默认提供商(google、 分别是 github、facebook 和 okta)。

如果您不需要自定义这些提供程序,您可以设置 提供者属性为您需要推断默认值的提供者属性。 此外,如果客户端注册的密钥与默认值匹配 支持的提供者,Spring Boot 也会推断这一点。

即Spring Boot 已预先配置用于 google 服务的 openid-connect 和用于 github 的通用 oauth2。

© www.soinside.com 2019 - 2024. All rights reserved.