Vue d’ensemble de l’authentification et l’autorisation du back-end
L’exemple de charge de travail du développeur Fabric comporte les flux d’authentification suivants côté back-end.
Authentification et autorisation des requêtes de Fabric vers la charge de travail
Structure d’en-tête d’autorisation
L’en-tête d’autorisation utilise un format de jeton spécifique :
SubjectAndAppToken1.0 subjectToken="delegated token", appToken="S2S token"
Ce format comprend deux jetons distincts :
subjectToken
: jeton délégué représentant l’utilisateur au nom duquel l’opération est en cours d’exécution.appToken
: jeton spécifique à l’application Fabric.
La raison d’être de l’utilisation d’un en-tête double jeton est triple :
Validation : la charge de travail peut vérifier que la requête provient de Fabric en validant le
appToken
.Contexte utilisateur : le
subjectToken
fournit un contexte utilisateur pour l’action en cours d’exécution.Communication inter-service : la charge de travail peut acquérir un jeton OBO (On-Behalf-Of) à l’aide du
subjectToken
, ce qui lui permet d’appeler d’autres services avec un jeton utilisateur.
Authentification
Les vérifications d’authentification principales effectuées pour SubjectAndAppToken sont les suivantes :
La validation et l’analyse de la valeur d’en-tête d’autorisation s’effectuent dans la méthode AuthenticateControlPlaneCall. Le jeton doit commencer par le préfixe « SubjectAndAppToken1.0 » et inclure deux jetons -
subjectToken
etappToken
.Validation des propriétés de jeton Entra : à la fois
subjectToken
etappToken
sont validées pour les propriétés de jeton AAD courantes dans la méthode ValidateAadTokenCommon. Ces propriétés incluent la signature de jeton, la durée de vie des jetons, l’audience des jetons (audience de l’application de charge de travail) et la version du jeton (1.0) et l’émetteur.validation des propriétés appToken : la
appToken
ne doit pas avoir de revendicationscp
, mais doit avoir une revendicationidtyp
avec l’application comme valeur. Nous vérifions également cette revendicationtid
dans l’ID de client de l’éditeur de charge de travail.Exemples de revendications appToken :
{ "aud": "api://localdevinstance/00001111-aaaa-2222-bbbb-3333cccc4444/Fabric.WorkloadSample/123", "iss": "https://sts.windows.net/12345678-77f3-4fcc-bdaa-487b920cb7ee/", "iat": 1700047232, "nbf": 1700047232, "exp": 1700133932, "aio": "E2VgYLjBuv2l+c6cmm/iP/bnL2v+AQA=", "appid": "11112222-bbbb-3333-cccc-4444dddd5555" "appidacr": "2", "idp": "https://sts.windows.net/12345678-77f3-4fcc-bdaa-487b920cb7ee/", "idtyp": "app", "oid": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "rh": "0.ACgAGX-u-vN3zE-9qkh7kgy37hQbaU7-v2xFr59O_foS7VLZAAA.", "sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "tid": "bbbbcccc-1111-dddd-2222-eeee3333ffff", "uti": "5bgMXs3uMUSAHCruRjACAA", "ver": "1.0" }
Validation des propriétés subjectToken : vérifiez que le subjectToken inclut une revendication
scp
avec l’étendueFabricWorkloadControl
, qu’il n’existe aucune revendicationidtyp
présente dans le jeton et qu’elle a la mêmeappid
que dans leappToken
.Exemples de revendications subjectToken :
{ "aud": "api://localdevinstance/00001111-aaaa-2222-bbbb-3333cccc4444/Fabric.WorkloadSample/123", "iss": "https://sts.windows.net/12345678-77f3-4fcc-bdaa-487b920cb7ee/", "iat": 1700050446, "nbf": 1700050446, "exp": 1700054558, "acr": "1", "aio": "ATQAy/8VAAAAUgWRMRnBo4VGHvrKRykUXOXBNKS1cHnBxLrYkZJJGSjAVyJGBecbLdSud1GUakER", "amr": [ "pwd" ], "appid": "11112222-bbbb-3333-cccc-4444dddd5555" "appidacr": "2", "ipaddr": "46.117.19.50", "name": "john doe", "oid": "bbbbbbbb-1111-2222-3333-cccccccccccc", "rh": "0.ASgAGX-u-vN3zE-9qkh7kgy37hQbaU7-v2xFr59O_foS7VLZANQ.", "scp": "FabricWorkloadControl", "sub": "X0Wl85UA-uOmdkQz5MoT-hEgYZXDq9FYdS8g2bFUaZA", "tid": "bbbbcccc-1111-dddd-2222-eeee3333ffff", "unique_name": "user1@constso.com", "upn": "user1@constso.com", "uti": "_llZwmJoSUiHv-kw6tfDAA", "ver": "1.0" }
Voir IAuthenticationService.
Remarque
Toutes les validations de notre exemple de code sont destinées aux jetons version 1.0.
Autorisation
Une fois qu’il a été confirmé que la demande provient du service Fabric (via le appToken
), Fabric a vérifié que l’utilisateur dispose des autorisations nécessaires pour effectuer l’action, en fonction des métadonnées d’autorisations de Fabric.
Authentification et autorisation des demandes de la charge de travail vers Fabric
Demandes de contrôle de charge de travail
Les API de contrôle de la charge de travail sont des API Fabric spéciales qui prennent en charge les charges de travail avec leur gestion du cycle de vie des éléments Fabric. Ces API utilisent le même format d’en-tête d’autorisation SubjectAndAppToken1.0.
SubjectAndAppToken1.0 subjectToken="delegated token", appToken="S2S token"
Les appels provenant de la charge de travail incluent les jetons suivants :
subjectToken
: jeton délégué par l’utilisateur (obtenu via le flux OBO) représentant l’utilisateur pour lequel l’opération est en cours d’exécution. Fabric vérifiera que l’utilisateur dispose des autorisations requises pour effectuer l’action requise.appToken
: jeton spécifique à l’application de charge de travail. Fabric vérifie que ce jeton provient de l’application Microsoft Entra de la charge de travail à laquelle appartient l’élément Fabric approprié et qui se trouve sur le client de l’éditeur de charge de travail.
Consultez la méthode ValidatePermissions
dans AuthorizationHandler.
API publiques
Pour appeler des API Fabric publiques, la charge de travail doit acquérir un jeton OBO Entra ID standard avec les étendues d’API appropriées et le transmettre en tant que jeton du porteur dans l’en-tête d’autorisation de la demande.
Consultez FabricExtensionController.
Authentification et autorisation des requêtes de la charge de travail du FE vers la charge de travail du BE
En-tête d’autorisation.
L’en-tête d’autorisation d’une demande envoyée de la charge de travail FE à la charge de travail BE utilise un jeton du porteur standard.
Authentification
La méthode AuthenticateControlPlaneCall dans la charge de travail BE est chargée de valider le jeton. Les vérifications principales effectuées sont les suivantes :
Durée de vie du jeton : garantit que le jeton est dans sa période d’utilisation valide.
Signature : vérifie l’authenticité du jeton.
Public : vérifie que le public du jeton correspond à l’application Microsoft Entra de la charge de travail.
Émetteur: Valide l’émetteur du jeton.
Étendues autorisées : valide les étendues auxquelles le jeton est autorisé à accéder.
L’autorisation est obtenue en invoquant la méthode ValidatePermissions. Cette méthode appelle l’API resolvePermissions
dans le point de terminaison de contrôle de charge de travail Fabric pour l’élément Fabric approprié et vérifie que l’utilisateur dispose des autorisations nécessaires pour l’opération.
Opérations de longue durée – Jeton d’actualisation
L’autorisation est obtenue en invoquant la méthode ValidatePermissions. Cette méthode appelle l’API resolvePermissions
dans le point de terminaison de contrôle de charge de travail Fabric pour l’élément Fabric approprié et vérifie que l’utilisateur dispose des autorisations nécessaires pour l’opération.
Si vos charges de travail incluent des opérations durables, par exemple, dans le cadre de JobScheduler vous risquez de vous trouver dans une situation où la durée de vie du jeton n’est pas suffisante. Pour plus d’informations sur l’authentification du processus durable, consultez Processus OBO durables.