Cuando se trabaja con flujos de autenticación modernos, la seguridad es primordial. A menudo, los desarrolladores necesitan integrar la autenticación con proveedores de identidad de confianza, como Google o Microsoft. Aquí es donde OpenID Connect (OIDC) entra en juego.
OIDC es una capa de identidad construida sobre OAuth 2.0. Permite que su aplicación verifique la identidad del usuario. Permite a su aplicación verificar la identidad de un usuario y obtener información básica de su perfil de forma segura. A partir de las últimas mejoras de la clase cs.NetKit.OAuth2Provider 4D 21 facilita el trabajo con OpenID Connect al soportar el parámetro nonce, junto con nuevos atributos de token, incluyendo id_token.
Cuando usted solicita alcances OAuth 2.0 estándar, recibirá un access_token, que sirve para acceder a las APIs pero no le dice quién es el usuario. Para identificar al usuario, debe incluir el ámbito openid. Esto activa la capa OpenID Connect y garantiza que el proveedor de identidad también devuelva un id_token.
Los campos de aplicación adicionales pueden enriquecer la información incluida en el id_token:
- openid → obligatorio, activa OpenID Connect y proporciona un id_token.
- profile → opcional, devuelve información de perfil como nombre, sobre nombre y foto.
- email → opcional, incluye la dirección de correo electrónico del usuario.
El parámetro nonce es específico de las solicitudes OpenID Connect. Asocia una sesión de cliente con el token de ID devuelto y ayuda a proteger contra ataques de repetición.
- Es opcional, pero se recomienda encarecidamente para mejorar la seguridad.
- El valor se pasa sin modificar desde la solicitud de autenticación al token de ID.
¿Qué es el ID_Token?
El id_token es una propiedad del objeto token, devuelta cuando se solicita el ámbito openid. Contiene información sobre la identidad del usuario en formato JWT. Dado que está codificado como texto, necesitará deserializar el JWT para leer su contenido. Para ello, puede utilizar la clase JWT contenida en Netkit.
var $provider:={}
$provider.name:="Microsoft"
$provider.permission:="signedIn"
$provider.clientId:="xxxx"
$provider.redirectURI:="http://127.0.0.1:80/authorize/"
$provider.scope:="openid profile email" // request identity + profile info
$provider.nonce:="randomNonce456" // optional nonce value
var $oauth:=cs.NetKit.OAuth2Provider.new($provider)
var $token:=$oauth.getToken()
// Access the id_token
If ($token.token.id_token#Null)
// Deserialize the JWT result with cs.NetKit.JWT class
var $openID:=cs.NetKit.JWT.new().decode($token.token.id_token)
If ($openID.payload.nonce=$param.nonce)
ALERT("Hello "+$openID.payload.name)
End if
End if
//$openID={
// header: {
// typ: "JWT";
// alg: "RS256";
// kid: "HS23b7Do..."
// };
// payload: {
// aud: "b6822251-7..."; // the clientId (your application).
// iss: "https://login.microsoftonline.com/06dc191b-7348-4b66-b0d9-806cb7d9455b/v2.0";
// iat: 1758537433; // the time when the token was issued.
// nbf: 1758537433; // the earliest time when the token is considered valid.
// exp: 1758541333; // the token expiration time.
// email: "your.name@outlook.com";
// name: "Your Name";
// nonce: "randomNonce456"; // the value sent in the request to protect against replay attacks (if used).
// oid: "064fd139-65..."; // the unique identifier of the user’s account in the identity provider’s directory
// preferred_username: "your.name@outlook.com";
// rh: "1.AV8AGxncBkhz..."; // refresh token handle
// sid: "008cb789-7..."; // session ID
// sub: "6RcYjA-CqS..."; // the unique identifier of the user
// tid: "06dc191b-73..."; // identifies the tenant (organization)
// uti: "sS7qSOW0..."; // unique token identifier
// ver: "2.0"
// };
// signature": "gy4AwVunCf_NbeUP..."
//}
conclusión
Con la introducción del soporte para nonce e id_token, 4D simplifica la integración de OpenID Connect. Solicitando los ámbitos correctos y decodificando el id_token, sus aplicaciones pueden autenticar usuarios de forma segura mientras acceden a información de identidad fiable.
Por el momento, no se pueden publicar comentarios en esta entrada.