Visão geral da autenticação e autorização de back-end
O exemplo de carga de trabalho do desenvolvedor de malha tem os seguintes fluxos de autenticação no lado do back-end.
Autenticação e autorização de solicitações do Fabric para a carga de trabalho
Estrutura do cabeçalho de autorização
O cabeçalho de autorização usa um formato de token específico:
SubjectAndAppToken1.0 subjectToken="delegated token", appToken="S2S token"
Este formato inclui dois tokens distintos:
subjectToken
: Um token delegado que representa o usuário em nome do qual a operação está sendo executada.appToken
: Um token específico para o aplicativo Fabric.
A lógica por trás do uso de um cabeçalho dual-token é tripla:
Validação: a carga de trabalho pode verificar se a solicitação se originou do Fabric validando o
appToken
.Contexto do usuário: fornece
subjectToken
um contexto de usuário para a ação que está sendo executada.Comunicação entre serviços: a carga de trabalho pode adquirir um token OBO (On-Behalf-Of) usando o
subjectToken
, permitindo chamar outros serviços com um token de usuário.
Autenticação
As principais verificações de autenticação realizadas para o SubjectAndAppToken são:
A validação e a análise do valor do cabeçalho de autorização são feitas no método AuthenticateControlPlaneCall . O token deve começar com o prefixo "SubjectAndAppToken1.0" e incluir dois tokens -
subjectToken
eappToken
.Validação de propriedades de token Entra: Ambos
subjectToken
eappToken
são validados para propriedades comuns de token do Microsoft Entra no método ValidateAadTokenCommon . Essas propriedades incluem assinatura de token, tempo de vida do token, audiência de token (audiência do aplicativo de carga de trabalho) e versão do token (1.0) e emissor.Validação de propriedades appToken: O
appToken
não deve ter umascp
declaração, mas deve ter umaidtyp
declaração com app como o valor. Também verificamos essatid
declaração no ID do locatário do editor de carga de trabalho.Exemplos de declarações 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" }
validação de propriedades subjectToken: certifique-se de que o subjectToken inclua uma
scp
declaração com oFabricWorkloadControl
escopo, que não haja nenhumaidtyp
declaração presente no token e que ele tenha o mesmoappid
que noappToken
.Exemplos de declarações 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" }
Consulte IAuthenticationService.
Nota
Todas as validações em nosso código de exemplo são para tokens da versão 1.0.
Autorização
Uma vez confirmado que a solicitação tem origem no serviço Fabric (por meio do ), o appToken
Fabric verificou se o usuário tem as permissões necessárias para executar a ação, com base nos metadados de permissões do Fabric.
Autenticação e autorização de solicitações da carga de trabalho para o Fabric
Solicitações de controle de carga de trabalho
As APIs de controle de carga de trabalho são APIs de malha especiais que oferecem suporte a cargas de trabalho com o gerenciamento do ciclo de vida do item de malha. Essas APIs usam o mesmo formato de cabeçalho de autorização SubjectAndAppToken1.0.
SubjectAndAppToken1.0 subjectToken="delegated token", appToken="S2S token"
As chamadas provenientes da carga de trabalho incluíam os seguintes tokens:
subjectToken
: Um token delegado pelo usuário (obtido através do fluxo OBO) que representa o usuário em nome do qual a operação está sendo executada. A malha verifica se o usuário tem as permissões necessárias para executar a ação necessária.appToken
: Um token específico para o aplicativo de carga de trabalho. O Fabric verifica se esse token é do aplicativo Microsoft Entra da carga de trabalho à qual o item Fabric relevante pertence e que está no locatário do editor de carga de trabalho.
Consulte o ValidatePermissions
método em AuthorizationHandler.
APIs públicos
Para chamar APIs de malha públicas, a carga de trabalho deve adquirir um token OBO padrão do Microsoft Entra com os escopos de API relevantes e passá-lo como um token de portador no cabeçalho de autorização da solicitação.
Consulte FabricExtensionController.
Autenticação e autorização de solicitações de carga de trabalho FE para carga de trabalho BE
Cabeçalho de autorização
O cabeçalho de autorização em uma solicitação enviada da carga de trabalho FE para a carga de trabalho BE usa um token de portador padrão.
Autenticação
O método AuthenticateControlPlaneCall na carga de trabalho BE é responsável pela validação do token. As principais verificações realizadas são:
Tempo de vida do token: garante que o token esteja dentro do período de uso válido.
Assinatura: verifica a autenticidade do token.
Público: verifica se o público do token corresponde à carga de trabalho do aplicativo Microsoft Entra.
Emissor: Valida o emissor do token.
Escopos permitidos: valida os escopos que o token tem permissão para acessar.
A autorização é obtida invocando o método ValidatePermissions . Esse método chama a resolvePermissions
API no ponto de extremidade de controle de carga de trabalho de malha para o item de malha relevante e verifica se o usuário tem as permissões necessárias para a operação.
Operações de longa duração - atualizar Token
A autorização é obtida invocando o método ValidatePermissions . Esse método chama a resolvePermissions
API no ponto de extremidade de controle de carga de trabalho de malha para o item de malha relevante e verifica se o usuário tem as permissões necessárias para a operação.
Se suas cargas de trabalho incluírem operações de longa duração, por exemplo, como parte do JobScheduler, você pode se deparar com uma situação em que o tempo de vida do Token não é suficiente. Para obter mais informações sobre como autenticar processos de longa execução, processos OBO de longa execução.