Bei der Arbeit mit modernen Authentifizierungsabläufen steht die Sicherheit an erster Stelle. Entwickler müssen häufig die Authentifizierung mit vertrauenswürdigen Identitätsanbietern wie Google oder Microsoft integrieren. An dieser Stelle kommt OpenID Connect (OIDC) ins Spiel.
OIDC ist eine Identitätsschicht, die auf OAuth 2.0 aufbaut. Sie ermöglicht es Ihrer Anwendung, die Identität eines Benutzers zu überprüfen und grundlegende Profilinformationen auf sichere Weise zu erhalten. Mit den jüngsten Erweiterungen der cs.NetKit.OAuth2Provider Klasse erleichtert 4D 21 nun die Arbeit mit OpenID Connect durch die Unterstützung des nonce-Parameters und neuer Token-Attribute, einschließlich des id_token.
Wenn Sie Standard-OAuth-2.0-Bereiche anfordern, erhalten Sie ein access_token, das für den Zugriff auf APIs gedacht ist, aber keine Auskunft über den Benutzer gibt. Um den Benutzer zu identifizieren, müssen Sie den openid-Bereich einschließen. Dadurch wird die OpenID-Connect-Schicht aktiviert und sichergestellt, dass der Identitätsanbieter ebenfalls ein id_token zurückgibt.
Zusätzliche Scopes können die im id_token enthaltenen Informationen anreichern:
- openid → erforderlich, aktiviert OpenID Connect und liefert einen id_token.
- profile → optional, gibt Profilinformationen wie Name, Spitzname und Bild zurück.
- email → optional, enthält die E-Mail-Adresse des Benutzers.
Der nonce-Parameter ist spezifisch für OpenID Connect-Anfragen. Er assoziiert eine Client-Sitzung mit dem zurückgegebenen ID-Token und hilft, sich gegen Wiederholungsangriffe zu schützen.
- Er ist optional, wird aber für eine verbesserte Sicherheit dringend empfohlen.
- Der Wert wird unverändert von der Authentifizierungsanfrage an das ID Token weitergegeben.
Was ist das ID_Token?
Der id_token ist eine Eigenschaft des Token-Objekts, die bei der Anforderung des openid-Bereichs zurückgegeben wird. Er enthält Informationen zur Benutzeridentität im JWT-Format. Da es als Text kodiert ist, müssen Sie das JWT deserialisieren, um seinen Inhalt lesen zu können. Dazu können Sie die in Netkit enthaltene JWT-Klasse verwenden.
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..."
//}
Schlussfolgerung
Mit der Einführung der Unterstützung von nonce und id_token vereinfacht 4D die Integration von OpenID Connect. Durch die Abfrage der richtigen Scopes und die Dekodierung des id_token können Ihre Anwendungen Benutzer sicher authentifizieren und gleichzeitig auf zuverlässige Identitätsinformationen zugreifen.
