Comprendre les Azure Access Tokens et Refresh Tokens



Dans l'écosystème des services cloud, la sécurité et la gestion des authentifications sont cruciales. Microsoft Azure utilise un mécanisme basé sur des tokens pour authentifier et autoriser les accès aux ressources. Parmi ces tokens, les Access Tokens et Refresh Token jouent des rôles essentiels. Cet article vise à expliquer leur fonctionnement et leur utilisation

Qu'est-ce qu'un Access Token ?


Un Access Token est un jeton d'authentification de courte durée émis par Azure AD (Active Directory) lorsqu'un utilisateur ou une application réussit à se connecter. Voici quelques points clés sur les Access Tokens :


Durée de vie limitée : Généralement, un Access Token a une durée de vie d'une heure. Après cette période, il expire et n'est plus valide pour accéder aux ressources.

- Contenu : Il contient des informations sur l'utilisateur ou l'application, ainsi que les autorisations (scopes) accordées.

- Format : Il est souvent au format JWT (JSON Web Token), ce qui permet de transporter des informations entre deux parties de manière sécurisée.


Utilisation d'un Access Token


Lorsqu'une application souhaite accéder à une ressource protégée sur Azure, elle doit inclure l'Access Token dans l'en-tête de la requête HTTP. Voici un exemple en utilisant une requête HTTP standard :


GET /resource HTTP/1.1

Host: api.example.com

Authorization: Bearer <ACCESS_TOKEN>


L'API vérifie ensuite la validité du token avant de permettre l'accès à la ressource demandée.


Qu'est-ce qu'un Refresh Token ?


Un Refresh Token est un jeton de plus longue durée qui permet de renouveler un Access Token expiré sans nécessiter une nouvelle authentification de l'utilisateur. Voici les points clés sur les Refresh Tokens :


- Durée de vie plus longue : Contrairement aux Access Tokens, les Refresh Tokens ont une durée de vie beaucoup plus longue, souvent plusieurs jours ou semaines.

- Utilisation : Ils sont utilisés pour obtenir un nouveau Access Token lorsque celui-ci expire. Cela améliore l'expérience utilisateur en évitant des interruptions fréquentes pour se reconnecter.

- Sécurité : Les Refresh Tokens doivent être stockés de manière sécurisée car leur compromission pourrait permettre un accès prolongé aux ressources.


Renouvellement de l'Access Token avec un Refresh Token

Pour obtenir un nouveau Access Token, l'application envoie une requête à un endpoint Azure AD avec le Refresh Token. Voici un exemple de requête :


POST /oauth2/token HTTP/1.1

Host: login.microsoftonline.com

Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token

&refresh_token=<REFRESH_TOKEN>

&client_id=<CLIENT_ID>

&client_secret=<CLIENT_SECRET>


Si le Refresh Token est valide, Azure AD renvoie un nouveau Access Token ainsi qu'un nouveau Refresh Token.


Bonnes pratiques

- Sécurité : Les Access Tokens et Refresh Tokens doivent être stockés de manière sécurisée. Évitez de les exposer dans des URL ou de les stocker en clair.

- Expiration : Surveillez l'expiration des tokens et implémentez une logique de renouvellement appropriée pour éviter les interruptions de service.

- Scopes : Limitez les permissions (scopes) des tokens aux stricts besoins de l'application pour réduire les risques en cas de compromission.



Cas Réel d'Utilisation des Azure Access Tokens et Refresh Tokens

Pour illustrer l'utilisation des Access Tokens et Refresh Tokens dans un contexte réel, considérons le scénario d'un administrateur IT gérant des ressources sur Azure via des scripts PowerShell. L'administrateur souhaite automatiser certaines tâches, comme la création de machines virtuelles (VMs) et la gestion des ressources réseau, sans avoir à s'authentifier manuellement à chaque exécution du script.


Scénario d'Utilisation

1. Authentification Initiale et Obtention de l'Access Token


L'administrateur utilise un script PowerShell pour s'authentifier et obtenir un Access Token en utilisant un Service Principal.

# Variables

$tenantId = "<TENANT_ID>"

$clientId = "<CLIENT_ID>"

$clientSecret = "<CLIENT_SECRET>"

$resource = "https://management.azure.com/"


# URL pour l'authentification

$authUrl = "https://login.microsoftonline.com/$tenantId/oauth2/token"


# Corps de la requête

$body = @{

    grant_type    = "client_credentials"

    client_id     = $clientId

    client_secret = $clientSecret

    resource      = $resource

}


# Envoi de la requête pour obtenir le token

$response = Invoke-RestMethod -Method Post -Uri $authUrl -ContentType "application/x-www-form-urlencoded" -Body $body

$accessToken = $response.access_token


# Afficher l'Access Token

Write-Output "Access Token: $accessToken

2. Utilisation de l'Access Token pour Gérer les Ressources Azure


Une fois l'Access Token obtenu, il peut être utilisé pour faire des appels API sécurisés vers Azure Resource Manager.


# URL de l'API pour créer une machine virtuelle

$resourceGroupName = "myResourceGroup"

$vmName = "myVM"

$subscriptionId = "<SUBSCRIPTION_ID>"

$apiUrl = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachines/$vmName?api-version=2021-03-01"


# Corps de la requête pour créer une VM

$vmConfig = @{

    location = "eastus"

    properties = @{

        hardwareProfile = @{

            vmSize = "Standard_DS1_v2"

        }

        osProfile = @{

            computerName = $vmName

            adminUsername = "azureuser"

            adminPassword = "P@ssw0rd!"

        }

        networkProfile = @{

            networkInterfaces = @(@{

                id = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Network/networkInterfaces/myNic"

            })

        }

    }

}


# Conversion en JSON

$vmConfigJson = $vmConfig | ConvertTo-Json -Depth 10


# Envoi de la requête pour créer la VM

$response = Invoke-RestMethod -Method Put -Uri $apiUrl -ContentType "application/json" -Body $vmConfigJson -Headers @{

    Authorization = "Bearer $accessToken"

}


# Afficher la réponse

Write-Output $response


3. Renouvellement de l'Access Token avec le Refresh Token


Bien que le **Service Principal** utilise principalement des **client credentials** qui ne nécessitent pas de **Refresh Token**, il est possible d'utiliser un **Refresh Token** dans d'autres scénarios d'authentification, par exemple, avec des utilisateurs interactifs. Voici comment cela pourrait se faire :


# Variables

$refreshToken = "<REFRESH_TOKEN>"


# Corps de la requête pour renouveler le token

$body = @{

    grant_type    = "refresh_token"

    refresh_token = $refreshToken

    client_id     = $clientId

    client_secret = $clientSecret

    resource      = $resource

}

# Envoi de la requête pour obtenir un nouveau token

$response = Invoke-RestMethod -Method Post -Uri $authUrl -ContentType "application/x-www-form-urlencoded" -Body $body

$newAccessToken = $response.access_token

$newRefreshToken = $response.refresh_token


# Afficher le nouveau Access Token

Write-Output "New Access Token: $newAccessToken"


Conclusion

Les Access Tokens et Refresh Tokens sont des composants essentiels dans l'infrastructure de sécurité de Azure. Ils permettent une gestion efficace et sécurisée des authentifications et autorisations. Comprendre leur fonctionnement et leur utilisation est crucial pour développer des applications sécurisées et robustes sur Azure.

En suivant les bonnes pratiques de gestion des tokens, les développeurs peuvent s'assurer que leurs applications offrent une expérience utilisateur fluide tout en maintenant un haut niveau de sécurité.


Enregistrer un commentaire

Plus récente Plus ancienne