Loupe

OpenId Connect - certificat de signature de token - déploiement et utilisation sur une webapp Azure

Les jetons d'accès générés selon la norme OpenId Connect peuvent être signés numériquement afin d'avoir une vérification faite par le client demandeur de token. Cela est notamment le cas lors de l'utilisation de token au format JWT. Dans cet article nous verrons comment générer un certificat, demander son utilisation par OpenIddict et comment l'utiliser au sein d'une web app sur Azure.

Générer un certificat de signature

La première étape consiste à générer un certificat pour permettre la signature de vos jetons JWT. Je vous propose de le faire avec openssl en utilisant cette commande : 

openssl req 
    -x509 
    -sha256 
    -nodes 
    -days 365 
    -newkey rsa:2048 
    -keyout votreClefPrivee.key 
    -out votreCertificat.crt

Ces paramètres spécifient qu'il s'agit d'un certificat de type X509 valable pour une durée de 365 jours qui va produire une clef privée RSA 2048 bits. L'argument nodes demande de ne pas encrypter la clef privée au format PKCS. Vous aurez ainsi en sortie un fichier "votreCertificat.crt" et la clef privée "votreClefPrive.key".

Configurer OpenIddict

L'étape suivante consiste à demander à OpenIddict d'utiliser votre certificat en partant du principe qu'il est disponible sur la machine d'execution de votre serveur. Je vous propose donc de passer par la méthode AddSigningCertificate qui prend en paramètre l'empreinte correspond à votre certificat nouvellement créé. L'empreinte du certificat est ici lue dans la configuration ASP.Net Core à la clef OpenIdConnect:Thumbprint :

 services.AddOpenIddict()
.AddCore(
    options =>
    {
     // configuration du coeur
    })
.AddServer(
    options =>
   {
   // autres configurations du serveur ici
   var thumbprint = Configuration["OpenIdConnect:Thumbprint"];
     options.AddSigningCertificate(thumbprint);
    });

Pour obtenir l'empreinte de votre certificat, openssl vient à votre secours avec la commande ci-dessous. Il faudra prendre soin d'omettre les caractères ":" lorsque vous le renseignerez dans le fichier de configuration.

openssl 
    x509 
    -noout 
    -fingerprint 
    -sha1 
    -inform pem 
    -in votreCertificat.crt 

Configurer votre WebApp - téléversement du certificat

Il reste alors à aller configurer votre webapp sur Azure. La première étape consiste à téléverser le certificat au format PFX sur votre AppService. Il sera nécessaire de choisir un plan Basic B1 au minimum pour avoir accès à la page en question. 

Un PFX est une archive protégée par mot de passe qui contient à la fois votre clef privée et le certificat. OpenSSL va encore une fois vous aider à générer cela avec cette commande :

openssl 
    pkcs12 
    -export 
    -out votreArchive.pfx 
    -inkey cotreClefPrivee.key 
    -in votreCertificat.crt

Pour uplodaer le certificat, on suit cette procédure :

  1. Se connecter au portail Azure,
  2. Se rendre sur votre WebApp,
  3. Sélectionner "SSL Settings" dans le menu à gauche,
  4. Sélectionner l'onglet "Private Certificates (.pfx)" dans la page qui s'ouvre,
  5. Ajouter le fichier PFX précédemment créé via le bouton d'upload.

Capture d’écran 2019-01-23 à 16.57.23.png

Configurer votre WebApp - activation du certificat

La dernière étape consiste à activer votre certificat au niveau de la WebApp. Cela se fait simplement en rajoutant un appsettings ayant comme clef "WEBSITE_LOAD_CERTIFICATES" et comme valeur le thumbprint de votre certificat.

Happy coding :)

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus