|
|
|
|
|
- Comment utiliser une assertion JWT ?
JWTCréeAssertion (Fonction) En anglais : JWTCreateAssertion Crée une assertion JWT. Cette assertion possède une structure spécifique.
Une assertion JWT est constitué de trois parties séparées par des points (.). - Le header (En-tête) :
L'en-tête contient des métadonnées telles que le type de token (JWT) et l'algorithme de signature utilisé (par exemple, HS256 ou RS256). Exemple de JSON :
{ "alg": "HS256", "typ": "JWT" } - Le payload (Charge utile) :
Cette partie contient les claims (déclarations), c'est-à-dire les informations à transmettre. Il peut s'agir de :- Claims standards (par exemple : "iss" pour l'émetteur, "exp" pour la date d'expiration).
- Claims personnalisés selon les besoins.
Exemple de JSON :
{ "sub": "1234567890", "name": "John Doe", "admin": true, "iat": 1516239022 } - La signature :
La signature garantit l'intégrité du token. Elle est calculée à partir du "header" et du "payload" à l'aide d'une clé secrète (pour HMAC) ou d'une paire de clés privée/publique (pour RSA ou ECDSA).
tenant_id est une chaîne = "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx"
client_id est une chaîne = "xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx"
url_token est une chaîne = "https://login.microsoftonline.com/" + tenant_id + "/oauth2/v2.0/token"
entete est un JSON
entete.alg = "RS256"
entete.x5t = "0mjTHGD4wwEmkgfd45RHgqgfsas="
entete.typ = "JWT"
payload est un JSON
payload.iss = client_id
payload.sub = client_id
payload.aud = url_token
date_maintenant est une DateHeure
payload.iat = DateHeureVersEpoch(date_maintenant)
date_maintenant.Heure += 2
payload.exp = DateHeureVersEpoch(date_maintenant)
clé_privée est une chaîne = [
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDLqXc2nE0iTK++
puV2N+H2DoXLjwi36y84LRdLFbfT7BIybOBehIhfGRNY3NsdCShw2VhGGHn1sWl5
2+w6Y2VCZqbMG0XfowdVq1TExyuIeEcRhieiG4EMjP6+yIvwf7rIkmjmflisHBks
iXNeBx1CwvfpafU3ssMAaQ+F1z8LhN1w5REAx8+nALMFOoGHK83edutxesqggpyk
bmcKM8R18ty9au6/sTcOXmnCy</span>KnSk8kOGvvjSvQG3UVWIKUrXdRxGami+Z7EhW
YBJRMlK1YFOzTLJo1kRebUBvZxMXCWxwYjj3uLIk9a/EtTUEVvSvSxxy7KTGK5Xi
9h8hf9UdAgMBAAECggEAD/6oMS7HVAlHyCZdYRJ0eZmcYmdCXQdodvX7nVcAT/F7
YGByopmwCB/1CAaYYshkV7CKIT8s3OHpEbv26oMB5dwj/2Wo8C5ilhTVnHqz7Yzc
sACkPjQAx5aPLzaa3vF5HuV4vZlwp1uxknDdEaZnYuXjCH7c1loAvJiDspQ8DFBn
8KauP5ww3hHIldLgdRu0TCNYIZnsNyTZRKd5PTZOvRtuHJGtYhrc4napcG2GS3ej
Nj7Uv23CxdbIFCu4J2C7BZdxNbT05koqZoAdmemVg6dnVXctVZSlIjZ4sE/6Dl7h
mlrmaV3TJdHuZTIvsDDvA2b7ujAxWnT6CKo31qSXQQKBgQD9T0UC+inzPTSlK6pr
RaxpTHW0eB9S6Q5/sT5I1VNYoRYe3t2MRcypDu</span>VIBZwywPy0WTcrXU8VXawR9a
0Cn3XXlMUe1bjIvuX5/3M8NgPihn7U3b4JeVpExggFioJPfktOELoaL5Dcaw6LRB
abdpirn9ZUtpmHZG+nNCfT+EjQKBgQDN0zUsZrAkBcq6dZEqzFt2SOh7UP4RwEED
D7NU1Y1P27e51zOcSD4IiQ5vuvxnRjB00QmAwk3ycDLMOd4GrNwtjCpXp5D+qkut
Ct5XZUuP+SMuVDhLhwCfw1l7LQvQJQDFGNZW9Bb9mNiKasWSDLDK1xNgv4uq9OQv
vZMzV2KW0QKBgQCB/wlaosmek92NmmAmFyaJD30kdbUVlpcjPvHI7PmN9XVluFgY
YcXLSOSBd886wae+H0KAjhD0zDmUPyH5N/Uhhm32leDq57D0T0zHz1/H535S/3zC
h3sjh6LOr29QM1CopY8MqhH6IHDEX1gKbdd7qX8TpMVT1rN0b5lxGNfdDQKBgFdb
1a3Kx+gCLVGGpN6tbgR+XW45qhyOpQlPmKXhHeFPOGPAWz9xyiKFSYNSsd6Dg/2Q
25+y2LKVvHnB9eKPa8RJQY+Cp5/vV79SZZxieffZnn0DcgFcg39LwqbtL55gljsR
l6fAYiGwxfe56bFbgY4WSzs9EWK2HkPFCr030biBAoGBAIOMvTq4Piqd2P/ShAoG
33xcBTwrmVKutEZH96BU77/IdD6B7s4jP0v7n9omdhttcVtBl5KThmNpvMAhbtb7
7coQ/ynoCpRZROS58hHhYQjIIuQO2RAsxBnaXP1gUFjQr9huDtgT9CDr8PoIIwYV
yYMBbJxhKhlBY9gYByl5G1qO
-----END PRIVATE KEY-----
]
assertion est une chaîne ANSI = JWTCréeAssertion(entete, payload, clé_privée)
param_oauth est un OAuth2Paramètres
param_oauth.URLToken = url_token
param_oauth.TypeAutorisation = taGrantTypePersonnalisé
param_oauth.ParamètresSupplémentaires = ChaîneConstruit([
client_id=%1&
scope=api://dsp-rscs-int/.default&
grant_type=client_credentials&
client_assertion=%2&
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
], client_id, assertion)
MonToken est un AuthToken = AuthIdentifie(param_oauth)
SI MonToken.Valide ALORS
Info("ok")
SINON
Info(ErreurInfo(errComplet))
FIN
clé_privée est une chaîne = [
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCioOja8od0VNih
1j2l9h7K9Q9z81xm26RVW+EZoed+k94m+3X/HAgSOuTWI/JcJniXAQRpP2KknqCc
onWqRtFa4MWdM47vwbUMmDC7FAKT0bKumYpIS/dNXR9BkANjil0ktHe3FGK5Xeuq
YFbDQ8GZTNxAEjvE3NPJ7lRun9DZ9HpTEtNehHjsl7D3njTxo1wuRv0fU+GYqN1J
hspIXeAY96mXxRBEJZyH8CVCt92MCSDlwgnEopvO/JwFPmqSJ63BNs2cUxjImdKw
dmKvIUqoFjWEJmt38ovA17C0r6ykcW6EoTBBW10rl2h9uABuYFxYjoqmyETnD73b
+NJZTSd1AgMBAAECggEAEcvA32ClwO2d7Qu4IEaP9Q6e+8W4KUtErtCIj9j/L4M3
zpU6wslK+s+2BdbWKQ5OqNuEI447mZ8AHVPLw2/Pbf3lsf+X1xWf3bpzrq0QYSOT
xXZowuOJMs6LYo3DSSu1aJRU+1RAP1+PL8wuAl0SPNfDzEESiEbP6Ctr0tUrMgZZ
eK67y8Mar9WsQAJUxl0k2b5qh/mPtNqi5TtJjNaszf8nfFtstNEbb3xxdQHs7nQ3
RsFV4deSjXKOOxdUvNUrqtwM9ru5m2+7eAcUpJw+Rkjbc+aWnzjRuZO15b6kTo2s
njRlWPqzDR4vjoO+l6ccSXXxRxu6wDB3QT8rRgXvWwKBgQDXwkcFKhW59b4J2N9I
E1lCu1sej4AQQlm1yHI389Nc62rlMl2by7VWEH5djpPXgVqwt/y3B3awfC3IFtYj
6P/uR+fc4AENS9OR8blJlA8eB60jpX3acSnvuwEbgqus2bVTOvvIU23SUxlfmqpn
Kx09vHTPhSXIPQKKtZk3eocsWwKBgQDA9di6gBPqyMnWCYDWmrfcDehX6swsEFAy
zpbtLJso7h428mjvIlOaB5Mon1VpkaDLNPEeSz8lT/LEqmcRhSiD8sJWNi7Mx7U2
Btg0KDq2U4PDOGqvaUqMRC9hL8h9ncsKI8DfcmpEHm6NzAkmjfftIaJeum9SEB52
EuvgAhaEbwKBgQCFlvLmTbJ6G5/49OD6/Y/s85htiahfaNWm6l9eKYgbJmBfXRn8
ltrGWRwEzXzYmG0Qsjq1ENf6Wkj2dL1OKrwcS0VSyxebpfFvkd2JozThARvA0Hzm
Pd8bYgxDflrRgVL2H7U5yf5blbxGJ7uOeXF3gjJJM0W7f5sNS3d8lE8RtQKBgBjU
SbQN4QI4Hgilpmd29yuguoH9m5Ib80XmYXNZZwnIQikN3kTPJPTP/raecg4oiAk9
4bzlL9XsSK/XwXV2rfT0mt8fD7yYAhBWpyFm/88QRgcrzkaOBOKxr2sRC/pmAIdo
fFwES/pB9DXYyGCmqf1gc5U+5i4oFtNYsfNcMWuPAoGBAI+vQCxWiYF8lruDqxOx
Z/wL9Q43P4mPAhZWSKzxat4SnZUZgCVhr5gniSv5GxXGMQIMtdlbbjEwFnPob9iz
ZiyeyY6BIVUBG4owAkEGFOeU7rLeP4Ia7FOv2B9uDiaP3wxMkbOWVmMutP/FAWmv
OthjEhg/w3a5Z0GLf0Doof9C
-----END PRIVATE KEY-----
]
entete est un JSON
entete.alg = "RS256"
entete.typ = "JWT"
entete.kid = "520c557b7bf48976eff0680ab63a676946ff1cdc"
payload est un JSON
payload.iss = "firebase-adminsdk-eaz6m@pctestlst.iam.gserviceaccount.com"
url_token est une chaîne = "https://oauth2.googleapis.com/token"
payload.aud = url_token
date_maintenant est une DateHeure
payload.iat = DateHeureVersEpoch(date_maintenant, epochUnixSeconde)
date_maintenant.Heure++
payload.exp = DateHeureVersEpoch(date_maintenant, epochUnixSeconde)
payload.scope = "https://www.googleapis.com/auth/firebase.messaging"
payload.test = 1
assertion est une chaîne ANSI = JWTCréeAssertion(entete, payload, clé_privée)
param_oauth est un OAuth2Paramètres
param_oauth.URLToken = url_token
param_oauth.TypeAutorisation = taGrantTypePersonnalisé
param_oauth.ParamètresSupplémentaires = ChaîneConstruit([
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&
assertion=%1
], assertion)
token est un AuthToken = AuthIdentifie(param_oauth)
SI token.Valide ALORS
Info("Token valide")
SINON
Erreur("Token non valide")
FIN
Syntaxe
Créer une assertion JWT signée avec une clé privée Masquer les détails
<Résultat> = JWTCréeAssertion(<Entête JWT> , <Payload JWT> , <Clé privée>)
<Résultat> : Chaîne de caractères Assertion JWT à utiliser pour l'authentification. <Entête JWT> : Chaîne de caractères Entête de l'assertion JWT au format JSON. <Payload JWT> : Chaîne de caractères Payload JWT à utiliser pour l'assertion. <Clé privée> : Chaîne de caractères Clé privée à utiliser pour signer l'assertion JWT.
Créer une assertion JWT signée avec un certificat Masquer les détails
<Résultat> = JWTCréeAssertion(<Entête JWT> , <Payload JWT> , <Certificat>)
<Résultat> : Chaîne de caractères Assertion JWT à utiliser pour l'authentification. <Entête JWT> : Chaîne de caractères Entête de l'assertion JWT au format JSON. <Payload JWT> : Chaîne de caractères Payload JWT à utiliser pour l'assertion. <Certificat> : Variable de type Certificat Nom de la variable Certificat à utiliser pour la signature de l'assertion JWT. Ce certificat est utilisé notamment pour le cryptage de type RS256. Remarques Comment utiliser une assertion JWT ? Dans OAuth 2.0, l'assertion client est une méthode efficace et sécurisée pour l'authentification client. Comparée à l'identifiant client et au secret traditionnels, l'assertion client utilise des JSON Web Tokens (JWT) pour renforcer la sécurité et la flexibilité, rendant le processus d'authentification plus fiable et informatif. Si la structure de l'assertion JWT est standard, les informations présentes dans les différentes parties de cette assertion peuvent dépendre des information attendues par le serveur d'authentification. Pour utiliser l'assertion JWT créée, il faut spécifier les éléments suivants dans la variable de type OAuth2Paramètres : - la propriété TypeAutorisation doit correspondre à la constante taGrantTypePersonnalisé.
- la propriété ParamètresSupplémentaires doit contenir le code permettant d'insérer l'assertion JWT dans l'authentification.
Remarque : Selon les informations attendues par le serveur d'authentification, les propriétés ClientSercret et ClientID de la variable de type OAuth2Paramètres doivent être précisés même en utilisant un assertion JWT. Composante : wd300ggl.dll
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|