Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Pour renforcer la sécurité de vos interactions avec l’API Digital Platform, nous avons implémenté un système d’authentification basé sur des jetons signés. Ce système utilise des jetons web JSON (JWT) pour garantir que vos sessions sont aussi sécurisées que possible. Suivez ces instructions et vous devez être opérationnel avec JWT en un rien de temps.
Remarque
Cette fonctionnalité est actuellement disponible pour tous les utilisateurs de l’API De plateforme numérique. Bien que l’authentification basée sur les jetons JWT offre une sécurité accrue, son utilisation est actuellement encouragée, mais pas obligatoire. Pour plus d’informations sur les processus d’authentification, consultez Service d’authentification .
Qu’est-ce que JWT ?
À partir du site web JWT :
« JSON Web Token (JWT) est une norme ouverte (RFC 7519) qui définit un moyen compact et autonome de transmettre en toute sécurité des informations entre les parties en tant qu’objet JSON. »
Xandr fournit des services d’API REST pour vous permettre de communiquer avec notre système par le biais de requêtes en ligne de commande et de fichiers JSON, et retourne des réponses sous la forme de JSON. L’implémentation d’une norme qui vous permet de transmettre ces informations en toute sécurité offre une meilleure protection de vos données et de l’ensemble du système de Xandr.
En outre, les jetons permettent une meilleure gestion des connexions utilisateur. Lorsque votre mot de passe expire, vous devez basculer immédiatement vers un nouveau mot de passe. Avec les jetons, vous pouvez avoir plusieurs jetons à la fois. Par conséquent, lorsqu’un jeton arrive à expiration, vous disposez d’une période de transition qui vous donne le temps de mettre à jour vos informations de connexion.
Bibliothèque JWT
Pour utiliser des jetons JWT, vous devez disposer d’un générateur de jetons. Vous pouvez générer des jetons JWT en utilisant l’une des nombreuses bibliothèques disponibles sur le site web JWT.
Préparation à l’utilisation des jetons
Avant de pouvoir utiliser des jetons, vous devez vous connecter à l’aide de votre mot de passe pour collecter des informations et configurer vos jetons dans le système de Xandr. Une fois votre jeton JWT inscrit, vous n’avez plus besoin de vous connecter à nouveau avec un mot de passe.
Commencez par authentifier et récupérer un jeton de connexion initial :
curl -X POST -d '{"auth":{"username":"<username>","password":"<PWD>"}}' https://api.appnexus.com/auth
Le nom d’utilisateur et le mot de passe sont vos informations d’identification de connexion standard.
La réponse de cet appel comprend un jeton, qui ressemble à ceci :
"token": "hbapi:123456:9999aa0000dd9:nym2",
Vous utiliserez ce jeton pour accéder au système jusqu’à ce que vous ayez inscrit votre clé publique (que nous allons créer dans un instant).
Ensuite, vous devez récupérer votre ID d’utilisateur. Récupérez votre ID d’utilisateur en appelant le service utilisateur :
curl -H 'Authorization: hbapi:123456:9999aa0000dd9:nym2' 'https://api.appnexus.com/user?username=<username>'
En tant qu’utilisateur actuellement connecté, vous pouvez également utiliser cette commande pour rechercher votre ID :
curl -H 'Authorization: hbapi:123456:9999aa0000dd9:nym2' 'https://api.appnexus.com/user?current'
Notez l’ID retourné. Vous l’utiliserez ultérieurement dans un fichier JSON pour configurer votre jeton.
Create clés privées et publiques
Remarque
Information
Network Administration est le rôle de plateforme requis pour créer une clé publique pour un compte donné.
Votre clé privée est utilisée pour signer vos demandes d’authentification. Une clé privée est censée être exactement celle-ci : privée. Vous ne souhaitez partager cette clé avec personne. Exécutez cette commande pour créer votre clé privée :
openssl genrsa -out my-api-key 2048
- openssl : il s’agit de l’outil de commande qui crée un fichier contenant votre clé privée. Il implémente les protocoles Secure Sockets Layer et Transport Layer Security.
- genrsa : commande qui indique à openssl de générer une clé privée. Cela utilise le système de chiffrement RSA.
-
-out my-api-key
: placez la clé privée dans le fichier nommémy-api-key
. -
2048
: taille, en bits, de la clé privée. Si vous laissez ce nombre, la valeur par défaut est512
. Nous vous recommandons d’utiliser la2048
valeur .
Le my-api-key
fichier remplacera votre mot de passe en tant que secret qui protège votre compte d’API.
Utilisez votre clé privée pour générer une clé publique :
openssl rsa -in my-api-key -pubout > my-api-key.pub
- rsa : commande qui traite les clés RSA.
-
-in my-api-key
: fichier contenant la clé privée à utiliser comme entrée pour créer la clé publique. -
-pubout
: cette option spécifie qu’une clé publique doit être sortie plutôt qu’une clé privée. -
>
my-api-key.pub
: fichier qui contiendra votre clé publique.
Votre clé publique sera partagée avec l’API et sera utilisée pour vérifier que votre clé privée a été utilisée pour signer le JWT.
Remplacer les caractères de nouvelle ligne
Votre clé publique contient des sauts de ligne. Étant donné que cette clé sera envoyée à l’API dans le cadre d’une charge utile JSON, vous devez remplacer les sauts de ligne par des caractères de nouvelle ligne : \n. Vous pouvez effectuer cette opération manuellement, puis copier la clé dans votre fichier JSON, ou exécuter la commande suivante et copier la sortie :
perl -pe 's/n\n/\\n/g' my-api-key.pub
Remarque
Selon votre environnement de ligne de commande, cela peut simplement afficher la touche avec des sauts de ligne plutôt que le caractère \n. Si cela se produit, vous devez entrer manuellement une \n pour remplacer chaque saut de ligne lorsque vous copiez la clé dans votre fichier JSON.
Create votre fichier JSON de clé publique
Create un fichier JSON comme suit :
{
"public-key": {
"active": true,
"name": "my-api-key",
"user_id": <userid>,
"encoded_value": "<public key>"
}
}
Remplacez par <userid>
l’ID utilisateur que nous avons récupéré précédemment.
Pour <public key>
, collez la valeur complète de la clé publique, y compris le BEGIN PUBLIC KEY
texte et END PUBLIC KEY
. N’oubliez pas de remplacer tous les sauts de ligne par \n. Par exemple :
"encoded_value": "-----BEGIN PUBLIC KEY-----\nMIIBI....\n......\n-----END PUBLIC KEY-----"
Enregistrez le fichier JSON. Pour cet exemple, nous avons nommé le fichier my-public-key.json
.
Inscrire votre clé publique
Exécutez la commande suivante pour inscrire votre clé publique :
curl -H 'Authorization: hbapi:123456:9999aa0000dd9:nym2' -H 'Content-Type: application/json' -X POST -d @my-public-key.json 'https://api.appnexus.com/public-key?user_id=<userid>'
Notez que nous avons utilisé le même jeton dans notre appel au service à clé publique que dans notre appel précédent au service utilisateur.
Si votre clé a été correctement inscrite, vous recevrez une réponse similaire à celle-ci :
{
"response": {
"status": "OK",
"count": 1,
"start": 0,
"num_elements": 1,
"debug_info": {
"instance": "01.authentication-api.test1.nym2",
"time": 475,
"start_time": "2017-02-07T16:48:42.747Z",
"version": "0.22.0",
"request_id": "01.authentication-api.test1.nym2-1486486122747-0000000000000000000"
},
"public-key": {
"active": true,
"encoded_value": "-----BEGIN PUBLIC KEY-----\nMIIBI...\n...\n...\n-----END PUBLIC KEY-----",
"name": "my-api-key",
"user_id": 1234
}
}
}
Create une signature JWT
Exemples de pseudo-code du générateur JWT
Les exemples ci-dessous supposent que l’utilisateur a défini certaines variables sur des informations spécifiques à la clé utilisée pour l’authentification. Par exemple, la an_key_name
variable utilisée pour l’en-tête kid
dans le code ci-dessous contiendrait la valeur du "name"
champ utilisé dans l’objet JSON lors de l’inscription de la clé publique auprès de Xandr (voir Inscrire votre clé publique ci-dessus). La username
variable utilisée pour la valeur d’en-tête sub
est mappée au nom d’utilisateur associé à la clé, etc.
Exemple Python
# Generates the JWT signature, using the PyJWT library
with open(priv_key_path, 'r') as f:
cert = f.read()
jwt_signature = jwt.encode({
'sub': username,
'iat': datetime.datetime.utcnow()
},
cert,
algorithm='RS256',
headers={
'kid': an_key_name,
'alg': 'RS256',
"typ":"JWT"
}
)
Exemple NodeJS
var jwt = require('jsonwebtoken');
var token = jwt.sign({ sub: username, iat: epoch_time }, cert, { algorithm: 'RS256', header: { kid: an_key_name, alg: 'RS256' }});
S’authentifier avec un JWT
Il est maintenant temps de vous authentifier à l’aide de notre clé privée et de votre script de génération JWT. Exécutez une commande similaire à celle-ci pour créer votre JWT et vous authentifier :
curl -X POST -H 'Content-Type: text/plain' -d $(./<JWT generator>) https://api.appnexus.com/v2/auth/jwt
« Générateur JWT » est le script que vous avez créé avec une bibliothèque JWT qui génère le jeton. Il existe un exemple de pseudo-code ci-dessus de ce qui peut être dans ce générateur JWT. Vous pouvez exécuter votre script séparément et simplement passer le jeton lui-même à cette commande.
Cette opération retourne une réponse contenant votre nouveau jeton :
{
"response": {
"status": "OK",
"token": "authn:184994:a1111111-6766-3b66-8544-f11111111ffd:lax1",
"debug_info": {
"instance": "01.authentication-api.test1.lax1",
"time": 624,
"start_time": "2017-02-07T16:49:52.612Z",
"version": "0.22.0",
"request_id": "01.authentication-api.test102975.lax1-1486486192612-3065414328498075565"
}
}
}
Utiliser votre jeton
Vous pouvez maintenant utiliser le jeton retourné par votre appel JWT pour authentifier tous les appels dans l’API. Par exemple, voici ce même appel au service d’API utilisateur à l’aide de notre nouveau jeton :
curl -H 'Authorization: authn:184994:a1111111-6766-3b66-8546-f11111111ffd:lax1' 'https://api.appnexus.com/user?current'
Nouvelle session
Une fois votre session expirée, vous devez vous authentifier à nouveau. Mais à partir de là, vous pouvez ignorer toutes les étapes de la section précédente jusqu’à Create un jeton JWT. Cela signifie que pour chaque session, vous devez créer un jeton JWT et utiliser ce jeton pour authentifier le reste de vos appels d’API. Vous n’aurez plus besoin d’utiliser votre mot de passe.
Désactiver votre clé publique
Vous pouvez supprimer l’accès à l’API en désactivant .public-key
Pour désactiver une clé, créez un fichier JSON comme suit :
{
"public-key": {
"active": false
}
}
Comme vous pouvez le voir, ce fichier définit simplement le active
champ sur false
, ce qui indique que n’est public-key
plus active
. Exécutez la commande suivante pour désactiver :public-key
curl -X PUT -H 'Authorization: authn:184994:a1111111-6766-3b66-8546-f11111111ffd:lax1' -H 'Content-Type: application/json' -d @pkdeactivate.json 'https://api.appnexus.com/public-key?key_id=2&user_id=1234'
Dans la commande , vous devez inclure le json avec le active
champ défini false
sur (dans ce cas, nous avons inclus ce JSON dans le fichier pkdeactivate.json
). Vous devez également inclure et key_id
dans user_id
la chaîne de requête (public-key?key_id=2&user_id=1234
).
Vous pouvez trouver le key_ids
pour un utilisateur à l’aide d’une commande simple GET
:
curl -H 'Authorization: authn:184994:a1111111-6766-3b66-8546-f11111111ffd:lax1' 'https://api.appnexus.com/public-key?user_id=1234'
Vous pouvez facilement réactiver la clé avec la même commande que celle utilisée pour la désactiver. Modifiez simplement le JSON pour définir active
sur true
.