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.
Dans cet article, vous allez ajouter l’authentification utilisateur à l’application que vous avez créée dans Générer des applications Python avec Microsoft Graph. Vous utilisez ensuite l’API utilisateur Microsoft Graph pour obtenir l’utilisateur authentifié.
Ajouter l’authentification utilisateur
La bibliothèque de client Azure Identity pour Python fournit de nombreuses TokenCredential
classes qui implémentent des flux de jetonS OAuth2. Le Kit de développement logiciel (SDK) Microsoft Graph pour Python (préversion) utilise ces classes pour authentifier les appels à Microsoft Graph.
Configurer le client Graph pour l’authentification utilisateur
Commencez par utiliser la DeviceCodeCredential
classe pour demander un jeton d’accès à l’aide du flux de code de l’appareil.
Ouvrez graph.py et remplacez tout son contenu par le code suivant.
from configparser import SectionProxy from azure.identity import DeviceCodeCredential from msgraph import GraphServiceClient from msgraph.generated.users.item.user_item_request_builder import UserItemRequestBuilder from msgraph.generated.users.item.mail_folders.item.messages.messages_request_builder import ( MessagesRequestBuilder) from msgraph.generated.users.item.send_mail.send_mail_post_request_body import ( SendMailPostRequestBody) from msgraph.generated.models.message import Message from msgraph.generated.models.item_body import ItemBody from msgraph.generated.models.body_type import BodyType from msgraph.generated.models.recipient import Recipient from msgraph.generated.models.email_address import EmailAddress class Graph: settings: SectionProxy device_code_credential: DeviceCodeCredential user_client: GraphServiceClient def __init__(self, config: SectionProxy): self.settings = config client_id = self.settings['clientId'] tenant_id = self.settings['tenantId'] graph_scopes = self.settings['graphUserScopes'].split(' ') self.device_code_credential = DeviceCodeCredential(client_id, tenant_id = tenant_id) self.user_client = GraphServiceClient(self.device_code_credential, graph_scopes)
Ce code déclare deux propriétés privées, un
DeviceCodeCredential
objet et unGraphServiceClient
objet . La__init__
fonction crée un instance deDeviceCodeCredential
, puis utilise cette instance pour créer un instance deGraphServiceClient
. Chaque fois qu’un appel d’API est effectué à Microsoft Graph via ,user_client
il utilise les informations d’identification fournies pour obtenir un jeton d’accès.Ajoutez la fonction suivante à graph.py.
async def get_user_token(self): graph_scopes = self.settings['graphUserScopes'] access_token = self.device_code_credential.get_token(graph_scopes) return access_token.token
Remplacez la fonction vide
display_access_token
dans main.py par ce qui suit.async def display_access_token(graph: Graph): token = await graph.get_user_token() print('User token:', token, '\n')
Générez et exécutez l’application. Entrez
1
lorsque vous êtes invité à entrer une option. L’application affiche une URL et un code d’appareil.Python Graph Tutorial Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 1 To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code RB2RUD56D to authenticate.
Ouvrez un navigateur et accédez à l’URL affichée. Entrez le code fourni et connectez-vous.
Importante
Gardez à l’esprit tous les comptes Microsoft 365 existants qui sont connectés à votre navigateur lorsque vous accédez à
https://microsoft.com/devicelogin
. Utilisez les fonctionnalités du navigateur telles que les profils, le mode invité ou le mode privé pour vous assurer que vous vous authentifiez en tant que compte que vous envisagez d’utiliser pour les tests.Une fois terminé, revenez à l’application pour voir le jeton d’accès.
Conseil
À des fins de validation et de débogage uniquement, vous pouvez décoder les jetons d’accès utilisateur (pour les comptes professionnels ou scolaires uniquement) à l’aide de l’analyseur de jetons en ligne de Microsoft à l’adresse https://jwt.ms. L’analyse de votre jeton peut être utile si vous rencontrez des erreurs de jeton lors de l’appel de Microsoft Graph. Par exemple, vérifier que la revendication dans le
scp
jeton contient les étendues d’autorisation Microsoft Graph attendues.
Obtenir un utilisateur
Maintenant que l’authentification est configurée, vous pouvez effectuer votre premier appel microsoft API Graph. Ajoutez du code pour obtenir le nom et l’adresse e-mail de l’utilisateur authentifié.
Ajoutez la fonction suivante à graph.py.
async def get_user(self): # Only request specific properties using $select query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters( select=['displayName', 'mail', 'userPrincipalName'] ) request_config = UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration( query_parameters=query_params ) user = await self.user_client.me.get(request_configuration=request_config) return user
Remplacez la fonction vide
greet_user
dans main.py par ce qui suit.async def greet_user(graph: Graph): user = await graph.get_user() if user: print('Hello,', user.display_name) # For Work/school accounts, email is in mail property # Personal accounts, email is in userPrincipalName print('Email:', user.mail or user.user_principal_name, '\n')
Si vous exécutez l’application maintenant, une fois que vous vous êtes connecté, l’application vous accueille par son nom.
Hello, Megan Bowen!
Email: MeganB@contoso.com
Explication du code
Considérez le code dans la get_user
fonction . Il ne s’agit que de quelques lignes, mais il y a quelques détails clés à noter.
Accès à « moi »
La fonction génère une requête à l’API Obtenir l’utilisateur . Cette API est accessible de deux façons :
GET /me
GET /users/{user-id}
Dans ce cas, le code appelle le point de terminaison d’API GET /me
. Ce point de terminaison est une méthode de raccourci permettant d’obtenir l’utilisateur authentifié sans connaître son ID d’utilisateur.
Remarque
Étant donné que le GET /me
point de terminaison d’API obtient l’utilisateur authentifié, il est disponible uniquement pour les applications qui utilisent l’authentification utilisateur. Les applications d’authentification d’application uniquement ne peuvent pas accéder à ce point de terminaison.
Demande de propriétés spécifiques
La fonction utilise le paramètre de requête $select pour spécifier le jeu de propriétés dont elle a besoin. Microsoft Graph retourne uniquement les propriétés demandées dans la réponse. Dans get_user
, l’ajout $select
s’effectue avec le select
paramètre dans l’objet MeRequestBuilderGetQueryParameters
.