Compartilhar via


Visão geral da autenticação e autorização do back-end

O exemplo de carga de trabalho do desenvolvedor do Fabric 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 de 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"

Esse formato inclui dois tokens distintos:

  • subjectToken: Um token delegado representando a pessoa em nome de quem a operação está sendo realizada.
  • appToken: Um token específico para o aplicativo do Fabric.

A lógica por trás do uso de um cabeçalho de token duplo é tripla:

  • Validação: a carga de trabalho pode verificar se a solicitação se originou do Fabric validando o appToken.

  • Contexto do usuário: o subjectToken fornece 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 On-Behalf-Of (OBO) usando o subjectToken, permitindo que ele chame 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 análise do valor do cabeçalho de autorização é feito no método AuthenticateControlPlaneCall. O token deve começar com o prefixo "SubjectAndAppToken1.0" e incluir dois tokens: subjectToken e appToken.

  • Validação de propriedades de token do Entra: subjectToken e appToken são validados para propriedades de token do Microsoft Entra comuns no método ValidateAadTokenCommon. Essas propriedades incluem assinatura de token, tempo de vida do token, audiência do token (audiência do aplicativo de carga de trabalho) e versão do token (1.0) e emissor.

  • Validação de propriedades de appToken: o appToken não deve ter uma declaração scp, mas deve ter uma declaração idtyp com app como o valor. Também verificamos essa declaração tid no ID do locatário do fornecedor da carga de trabalho.

    Exemplo 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 das propriedades de subjectToken: certifique-se de que o subjectToken inclua uma declaração scp com o escopo FabricWorkloadControl, que não haja nenhuma declaração idtyp presente no token e que ele tenha o mesmo appid que no appToken.

    Exemplo 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.

Observação

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 se origina do serviço do Fabric (por meio do appToken), o Fabric verifica se a pessoa tem as permissões necessárias para realizar 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 do Fabric especiais que oferecem suporte a cargas de trabalho com seu gerenciamento do ciclo de vida do item do Fabric. Essas APIs usam o mesmo formato de cabeçalho de autorização SubjectAndAppToken1.0.

SubjectAndAppToken1.0 subjectToken="delegated token", appToken="S2S token"

Chamadas vindas da carga de trabalho, incluíram os seguintes tokens:

  • subjectToken: Um token delegado pelo usuário (obtido através do fluxo OBO) representando a pessoa em nome de quem a operação está sendo realizada. O Fabric 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 da carga de trabalho. O Fabric verifica se esse token é do aplicativo Microsoft Entra da carga de trabalho ao qual o item relevante do Fabric pertence e que está no locatário do editor da carga de trabalho.

Consulte o método ValidatePermissions em AuthorizationHandler.

APIs públicas

Para chamar APIs públicas do Fabric, a carga de trabalho deve adquirir um token padrão OBO do Microsoft Entra com os escopos de API relevantes e passá-lo como um token portador no cabeçalho de autorização da solicitação.

Consulte FabricExtensionController.

Autenticação e autorização de solicitações da carga de trabalho FE para a carga de trabalho BE

Cabeçalho de autorização

O cabeçalho de autorização em uma solicitação enviada do FE da carga de trabalho para o BE da carga de trabalho usa um token de portador padrão.

Autenticação

O método AuthenticateControlPlaneCall no BE da carga de trabalho é responsável por validar o token. As principais verificações realizadas são:

  • Tempo de vida do token: garante que o token esteja dentro de seu período de uso válido.

  • Assinatura: verifica a autenticidade do token.

  • Público-alvo: Verifica se o público-alvo do token corresponde ao aplicativo Microsoft Entra da carga de trabalho.

  • 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 API resolvePermissions no ponto de extremidade de controle de carga de trabalho do Fabric para o item do Fabric 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 API resolvePermissions no ponto de extremidade de controle de carga de trabalho do Fabric para o item do Fabric 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 execução prolongada, por exemplo, como parte do JobScheduler, você poderá se deparar com uma situação em que a duração do Token não é suficiente. Para mais informações sobre como autenticar processos de execução prolongada, Processos OBO de longa duração.