Configura el inicio de sesión social con OpenID Connect (OIDC)
El conector oficial de Logto para el protocolo OpenID Connect (OIDC).
En esta guía, asumimos que tienes conocimientos básicos de los conectores de Logto. Si no los tienes, consulta la guía Configurar conectores para comenzar.
Comenzar
El conector OIDC permite la conexión de Logto a un proveedor de identidad social arbitrario que soporte el protocolo OIDC.
ℹ️ Nota
El conector OIDC es un tipo especial de conector en Logto, puedes añadir algunos conectores basados en OIDC.
Crea tu aplicación OIDC
Cuando abres esta página, creemos que ya sabes a qué proveedor de identidad social deseas conectarte. Lo primero que debes hacer es confirmar que el proveedor de identidad soporta el protocolo OIDC, lo cual es un requisito previo para configurar un conector válido. Luego, sigue las instrucciones del proveedor de identidad para registrar y crear la aplicación relevante para la autorización OIDC.
Configura tu conector
SOLO admitimos el tipo de concesión "Authorization Code" por razones de seguridad y se adapta perfectamente al escenario de Logto.
clientId
y clientSecret
se pueden encontrar en la página de detalles de tus aplicaciones OIDC.
clientId: El ID de cliente es un identificador único que identifica la aplicación cliente durante el registro con el servidor de autorización. Este ID es utilizado por el servidor de autorización para verificar la identidad de la aplicación cliente y asociar cualquier token de acceso autorizado con esa aplicación cliente específica.
clientSecret: El secreto de cliente es una clave confidencial que se emite a la aplicación cliente por el servidor de autorización durante el registro. La aplicación cliente utiliza esta clave secreta para autenticarse con el servidor de autorización al solicitar tokens de acceso. El secreto de cliente se considera información confidencial y debe mantenerse seguro en todo momento.
tokenEndpointAuthMethod: El método de autenticación del endpoint de token es utilizado por la aplicación cliente para autenticarse con el servidor de autorización al solicitar tokens de acceso. Para descubrir los métodos admitidos, consulta el campo token_endpoint_auth_methods_supported
disponible en el endpoint de descubrimiento de OpenID Connect del proveedor de servicios OAuth 2.0, o consulta la documentación relevante proporcionada por el proveedor de servicios OAuth 2.0.
clientSecretJwtSigningAlgorithm (Opcional): Solo se requiere cuando tokenEndpointAuthMethod
es client_secret_jwt
. El algoritmo de firma JWT del secreto de cliente es utilizado por la aplicación cliente para firmar el JWT que se envía al servidor de autorización durante la solicitud de token.
scope: El parámetro de alcance se utiliza para especificar el conjunto de recursos y permisos a los que la aplicación cliente está solicitando acceso. El parámetro de alcance se define típicamente como una lista de valores separados por espacios que representan permisos específicos. Por ejemplo, un valor de alcance de "read write" podría indicar que la aplicación cliente está solicitando acceso de lectura y escritura a los datos de un usuario.
Se espera que encuentres authorizationEndpoint
, tokenEndpoint
, jwksUri
y issuer
como información de configuración del Proveedor de OpenID. Deberían estar disponibles en la documentación del proveedor social.
authenticationEndpoint: Este endpoint se utiliza para iniciar el proceso de autenticación. El proceso de autenticación generalmente implica que el usuario inicie sesión y otorgue autorización para que la aplicación cliente acceda a sus recursos.
tokenEndpoint: Este endpoint es utilizado por la aplicación cliente para obtener un token de ID que se puede usar para acceder a los recursos solicitados. La aplicación cliente generalmente envía una solicitud al endpoint de token con un tipo de concesión y un código de autorización para recibir un token de ID.
jwksUri: Esta es la URL del endpoint donde se puede obtener el Conjunto de Claves Web JSON (JWKS) del proveedor de identidad social (abreviado como IdP). El JWKS es un conjunto de claves criptográficas que el IdP utiliza para firmar y verificar JSON Web Tokens (JWTs) que se emiten durante el proceso de autenticación. El jwksUri
es utilizado por la parte confiable (RP) para obtener las claves públicas utilizadas por el IdP para firmar los JWTs, de modo que la RP pueda verificar la autenticidad e integridad de los JWTs recibidos del IdP.
issuer: Este es el identificador único del IdP que es utilizado por la RP para verificar los JWTs recibidos del IdP. Se incluye en los JWTs como el reclamo iss
(el token de ID siempre es un JWT). El valor del emisor debe coincidir con la URL del servidor de autorización del IdP, y debe ser un URI en el que la RP confíe. Cuando la RP recibe un JWT, verifica el reclamo iss
para asegurarse de que fue emitido por un IdP confiable y que el JWT está destinado a ser utilizado con la RP.
Juntos, jwksUri
y issuer
proporcionan un mecanismo seguro para que la RP verifique la identidad del usuario final durante el proceso de autenticación. Al usar las claves públicas obtenidas del jwksUri
, la RP puede verificar la autenticidad e integridad de los JWTs emitidos por el IdP. El valor del emisor asegura que la RP solo acepte JWTs que fueron emitidos por un IdP confiable y que los JWTs estén destinados a ser utilizados con la RP.
Dado que siempre se requiere una solicitud de autenticación, se proporciona un authRequestOptionalConfig
para envolver todas las configuraciones opcionales, puedes encontrar detalles en OIDC Authentication Request. También puedes notar que nonce
falta en esta configuración. Dado que nonce
debe ser idéntico para cada solicitud, colocamos la generación de nonce
en la implementación del código. ¡Así que no te preocupes por ello! Los mencionados anteriormente jwksUri
y issuer
también están incluidos en idTokenVerificationConfig
.
Puede que te preguntes por qué un protocolo OIDC estándar admite tanto los flujos implícitos como los híbridos, pero el conector de Logto solo admite el flujo de autorización. Se ha determinado que los flujos implícitos e híbridos son menos seguros que el flujo de autorización. Debido al enfoque de Logto en la seguridad, solo admite el flujo de autorización para el nivel más alto de seguridad para sus usuarios, a pesar de su naturaleza ligeramente menos conveniente.
responseType
y grantType
solo pueden ser valores FIJOS con el flujo "Authorization Code", por lo que los hacemos opcionales y los valores predeterminados se completarán automáticamente.
ℹ️ Nota
Para todos los tipos de flujo, proporcionamos una clave
customConfig
OPCIONAL para colocar tus parámetros personalizados. Cada proveedor de identidad social podría tener su propia variante en el protocolo estándar OIDC. Si tu proveedor de identidad social deseado se adhiere estrictamente al protocolo estándar OIDC, entonces no necesitas preocuparte porcustomConfig
.
Tipos de configuración
Nombre | Tipo | Requerido |
---|---|---|
scope | string | True |
clientId | string | True |
clientSecret | string | True |
authorizationEndpoint | string | True |
tokenEndpoint | string | True |
idTokenVerificationConfig | IdTokenVerificationConfig | True |
authRequestOptionalConfig | AuthRequestOptionalConfig | False |
customConfig | Record<string, string> | False |
Propiedades de AuthRequestOptionalConfig | Tipo | Requerido |
---|---|---|
responseType | string | False |
tokenEndpoint | string | False |
responseMode | string | False |
display | string | False |
prompt | string | False |
maxAge | string | False |
uiLocales | string | False |
idTokenHint | string | False |
loginHint | string | False |
acrValues | string | False |
Propiedades de IdTokenVerificationConfig | Tipo | Requerido |
---|---|---|
jwksUri | string | True |
issuer | string | string[] | False |
audience | string | string[] | False |
algorithms | string[] | False |
clockTolerance | string | number | False |
crit | Record<string, string | boolean> | False |
currentDate | Date | False |
maxTokenAge | string | number | False |
subject | string | False |
typ | string | False |
Consulta aquí para encontrar más detalles sobre IdTokenVerificationConfig
.