es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferencia entre OIDC y OAuth2 en el cliente de Spring OAuth: OIDC (OpenID Connect) es una capa de autenticación construida sobre OAuth2. Mientras que OAuth2 se utiliza principalmente para autorización (concesión de acceso a recursos protegidos), OIDC proporciona autenticación (verificación de identidad del usuario). En otras palabras, OAuth2 es un protocolo utilizado para obtener permisos de acceso a recursos protegidos, como API o servicios web, mientras que OIDC se utiliza para la autenticación del usuario, verificando quién es ese usuario. Spring OAuth es una biblioteca que facilita la implementación de OAuth2 y OIDC en aplicaciones basadas en Spring. Con Spring OAuth, puedes crear un cliente que se conecta a un proveedor de autenticación y autorización para autenticar a los usuarios y obtener autorizaciones para acceder a los recursos protegidos.

Mi objetivo es autenticar a un usuario a través de un servicio de autenticación (como Google o GitHub).

He intentado usar ambos y no entiendo por qué con GitHub mi autenticación se maneja con mi OAuth2UserService, mientras que con Google se llama a mi OidcUserService.

Espero que ambos llamen a OidcUserService porque es solo la autenticación que necesito.

Entonces, ¿por qué hay una diferencia tan grande?
¿Puedes iluminarme al respecto?
¿Me estoy perdiendo algo?

Código de ejemplo:

@Service
public class CustomOAuth2UserService extends DefaultOAuth2UserService {

    @Override
    public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
        OAuth2User user = super.loadUser(userRequest);
        log.info("Cargando usuario de OAuth2");
        return user;
    }
}
@Service
public class CustomOidcUserService extends OidcUserService {

    @Override
    public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2AuthenticationException {
        OidcUser user = super.loadUser(userRequest);
        log.info("Cargando usuario de Oidc");
        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
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Explicación

    La diferencia en el comportamiento entre los servicios de autenticación de Github y Google se debe a los protocolos que utilizan para la autenticación.

    Github utiliza el protocolo OAuth 2.0 para la autenticación, mientras que Google utiliza OpenID Connect, que se basa en OAuth 2.0.

    OAuth 2.0 se utiliza principalmente para autorización y delegación de acceso, mientras que OpenID Connect amplía OAuth 2.0 para proporcionar también capacidades de autenticación.

    Cuando un usuario inicia sesión con Github, el servicio de autenticación devuelve un AccessToken, que se utiliza para acceder a los recursos protegidos. En este caso, la autenticación es gestionada por CustomOAuth2UserService ya que extiende DefaultOAuth2UserService, que es responsable de cargar la información del usuario desde el punto final de UserInfo del proveedor.

    Por otro lado, cuando un usuario inicia sesión con Google, el servicio de autenticación devuelve un ID Token, que contiene información de identidad del usuario. Como este es un proceso de autenticación, se llama a CustomOidcUserService ya que extiende OidcUserService, que es responsable de cargar la información del usuario desde el punto final de información del usuario del proveedor.

    Por lo tanto, es un comportamiento esperado que la autenticación de Github sea gestionada por CustomOAuth2UserService y la autenticación de Google sea gestionada por CustomOidcUserService.

    Conclusión

    No te estás perdiendo nada y el comportamiento que estás viendo es el esperado. Comprender las diferencias de protocolo subyacentes entre los servicios de autenticación de Github y Google te ayudará a comprender mejor por qué tu código se comporta de la forma en que lo hace.

Comments are closed.