Gatilho de eventos de autenticação para Azure Functions biblioteca de clientes para Nó
O Gatilho de Evento de Autenticação para Azure Functions manipula todo o processamento de back-end (por exemplo, validação de esquema de token/json) para solicitações Http de entrada para eventos de autenticação. E fornece ao desenvolvedor um modelo de objeto fortemente tipado e com versão para trabalhar, o que significa que o desenvolvedor não precisa ter nenhum conhecimento prévio das cargas json de solicitação e resposta.
Esta estrutura de projeto fornece os seguintes recursos:
- Validação de token para proteger a chamada à API
- Modelo de objeto, digitação e intellisense de IDE
- Validação de entrada e saída dos esquemas de solicitação e resposta da API
- Controle de versão
- Não há necessidade de código clichê.
Introdução
instalar o pacote npm
npm install @azure/functions-authentication-events
Pré-requisitos
- Ferramentas de função do Azure
- Ferramentas do Azure Function Core
- Se estiver usando Visual Studio Code as seguintes extensões:
Autenticar o Cliente
Quando Azure AD serviço de eventos de autenticação chamar sua extensão personalizada, ele enviará um Authorization
cabeçalho com um Bearer {token}
. Esse token representará um serviço para a autenticação de serviço no qual:
- O 'recurso', também conhecido como público-alvo, é o aplicativo que você registra para representar sua API. Isso é representado pela declaração
aud
no token. - O 'cliente' é um aplicativo da Microsoft que representa o serviço de eventos de autenticação Azure AD. Ele tem um
appId
valor de99045fe1-7639-4a75-9d4a-577b6ca3810f
. Isso é representado por:- A
azp
declaração no token se a propriedade do aplicativoaccessTokenAcceptedVersion
estiver definida como2
. - A
appid
declaração no token se a propriedade do aplicativo deaccessTokenAcceptedVersion
recurso estiver definida1
como ounull
.
- A
Há três abordagens para lidar com o token. Você pode personalizar o comportamento usando as configurações do aplicativo , conforme mostrado abaixo ou por meio do arquivo local.settings.json em ambientes locais.
Validar tokens usando Azure Functions Azure AD integração de autenticação
Ao executar sua função em produção, é altamente recomendável usar a integração de autenticação Azure Functions Azure AD para validar tokens de entrada.
- Vá para a guia "Autenticação" no aplicativo de funções
- Clique em "Adicionar provedor de identidade"
- Selecione "Microsoft" como o provedor de identidade
- Selecione "Fornecer os detalhes de um registro de aplicativo existente"
- Insira o
Application ID
do aplicativo que representa sua API no Azure AD
O emissor e o público permitido dependem da accessTokenAcceptedVersion
propriedade do aplicativo (pode ser encontrado no "Manifesto" do aplicativo).
Se a accessTokenAcceptedVersion
propriedade estiver definida 2
como : 6. Defina a Issuer URL to "https://login.microsoftonline.com/{tenantId}/v2.0" 7. Set an 'Allowed Audience' to the Application ID (
appId')
Se a accessTokenAcceptedVersion
propriedade estiver definida como 1
ou null
: 6. Defina o Issuer URL to "https://sts.windows.net/{tenantId}/" 7. Set an 'Allowed Audience' to the Application ID URI (also known as
identifierUri). It should be in the format of
api://{azureFunctionAppName}.azurewebsites.net/{resourceApiAppId}or
api://{FunctionAppFullyQualifiedDomainName}/{resourceApiAppId}' se estiver usando um nome de domínio personalizado.
Por padrão, o gatilho de evento de autenticação validará se a integração de autenticação do Azure Function está configurada e marcar que o cliente no token esteja definido 99045fe1-7639-4a75-9d4a-577b6ca3810f
como (por meio das azp
declarações ou appid
no token).
Se você quiser testar sua API em relação a algum outro cliente que não esteja Azure AD serviço de eventos de autenticação, como usar o Postman, poderá definir uma configuração de aplicativo opcional:
- AuthenticationEvents__CustomCallerAppId - o guid do cliente desejado. Se não for fornecido,
99045fe1-7639-4a75-9d4a-577b6ca3810f
será assumido.
Fazer com que o gatilho valide o token
Em ambientes locais ou ambientes que não estão hospedados no serviço do Azure Function, o gatilho pode fazer a validação do token. Defina as seguintes configurações de aplicativo:
- AuthenticationEvents__TenantId - sua ID de locatário
- AuthenticationEvents__AudienceAppId - o mesmo valor que "Público permitido" na opção 1.
- AuthenticationEvents__CustomCallerAppId (opcional) – o guid do cliente desejado. Se não for fornecido,
99045fe1-7639-4a75-9d4a-577b6ca3810f
será assumido.
Um arquivo local.settings.json
de exemplo:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"AuthenticationEvents__TenantId": "8615397b-****-****-****-********06c8",
"AuthenticationEvents__AudienceAppId": "api://46f98993-****-****-****-********0038",
"AuthenticationEvents__CustomCallerAppId": "46f98993-****-****-****-********0038"
}
}
Nenhuma validação de token
Se você quiser não autenticar o token durante o desenvolvimento local, defina a seguinte configuração de aplicativo:
- AuthenticationEvents__BypassTokenValidation – o valor de
true
fará com que o gatilho não marcar para uma validação do token.
Início Rápido
- Visual Studio Code
- Iniciar o Visual Studio Code
- Executar o comando
func init . --worker-runtime node
do terminal por meio da paleta de comandos - Executar o comando
func new
do terminal por meio da paleta de comandos - Siga os prompts de criação do projeto
- Executar o comando
npm install @azure/functions-authentication-events
do terminal por meio da paleta de comandos - Executar o comando
npm install
do terminal por meio da paleta de comandos - Executar o comando
npm run-script build
do terminal por meio da paleta de comandos
- Para fins de desenvolvimento, a validação de token para teste:
- Adicione a chave de aplicativo AuthenticationEvents__BypassTokenValidation à seção "Valores" no arquivo local.settings.json e defina seu valor como true. Se você não tiver um arquivo local.settings.json em seu ambiente local, crie um na raiz do aplicativo de funções.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "node",
"AuthenticationEvents__BypassTokenValidation": true
}
}
- Depois que o projeto for carregado, você poderá executar o código de exemplo e verá o aplicativo do desenvolvedor do Azure Functions carregar seu ponto de extremidade.
Principais conceitos
Os principais conceitos do SDK do .NET do Azure podem ser encontrados aqui
Documentação
Uma das funções que a função foi publicada, há uma boa leitura sobre registro em log e métricas que podem ser encontradas aqui
Para obter a Documentação da API, consulte o (Link TBD)
Depois que isso passar para a versão prévia, não haverá alterações interruptivas e será tão simples quanto remover a origem do nuget que aponta para a visualização privada.
Exemplos
Para testar o aumento do token, faça o seguinte.
- Abra o projeto que foi criado na etapa anterior. (Início Rápido)
- Execute o Aplicativo.
func host start
- Depois que o aplicativo do desenvolvedor de funções do Azure for iniciado, copie a URL de escuta exibida com o aplicativo iniciado.
- Observação: todas as funções de autenticação estão listadas, caso tenhamos um ouvinte de função registrado chamado "OnTokenIssuanceStart"
- O ponto de extremidade da função será então uma combinação da url de escuta e da função, por exemplo: "http://localhost:7071/runtime/webhooks/AuthenticationEvents?code=(YOUR_CODE)& function=OnTokenIssuanceStart"
- Poste o conteúdo a seguir usando algo como Postman ou Fiddler.
- Etapas para usar o Postman podem ser encontradas (Link TBD)
{
"type": "microsoft.graph.authenticationEvent.tokenIssuanceStart",
"source": "/tenants/00000001-0000-0ff1-ce00-000000000000/applications/ef9e995c-efdb-4e76-97a9-8cdfc6e06afc",
"data": {
"@odata.type": "microsoft.graph.onTokenIssuanceStartCalloutData",
"tenantId": "00000001-0000-0ff1-ce00-000000000000",
"authenticationEventListenerId": "f2390d57-9664-4dde-b625-f0115925e1e2",
"customAuthenticationExtensionId": "9cc1c1ed-5f04-4fdf-85c0-94a7c6ea819c",
"authenticationContext": {
"correlationId": "f4bd1870-b774-4fa5-ba78-e08ac6be14c0",
"client": {
"ip": "127.0.0.1",
"locale": "en-us",
"market": "en-us"
},
"protocol": "OAUTH2.0",
"clientServicePrincipal": {
"id": "eedfddb9-304e-4d62-aa83-24700a0bcf0e",
"appId": "ef9e995c-efdb-4e76-97a9-8cdfc6e06afc",
"appDisplayName": "",
"displayName": "Test application"
},
"resourceServicePrincipal": {
"id": "eedfddb9-304e-4d62-aa83-24700a0bcf0e",
"appId": "ef9e995c-efdb-4e76-97a9-8cdfc6e06afc",
"appDisplayName": "",
"displayName": "Test application"
},
"user": {
"companyName": "Evo Sts Test",
"country": "",
"id": "69d24544-c420-4721-a4bf-106f2378d9f6",
"mail": "testadmin@evostsoneboxtest.com",
"onPremisesSamAccountName": "testadmin",
"onPremisesSecurityIdentifier": "testadmin",
"preferredDataLocation": "",
"userPrincipalName": "testadmin@evostsoneboxtest.com"
}
}
}
}
- Você deve ver esta resposta:
{
"data": {
"@odata.type": "microsoft.graph.onTokenIssuanceStartResponseData",
"actions": [
{
"@odata.type": "ProvideClaimsForToken",
"claims": [
{
"DateOfBirth": "01/01/2000"
},
{
"CustomRoles": [
"Writer",
"Editor"
]
}
]
}
]
}
}
Solução de problemas
- Visual Studio Code
- Se estiver em execução no Visual Studio Code, você receberá um erro nos moldes do Emulador de Armazenamento do Azure local não estiver disponível, você poderá iniciar o emulador manualmente.! (Observação: o emulador do Armazenamento do Azure agora foi preterido e a substituição sugerida é Azurite)
- Se estiver usando Visual Studio Code no Mac, use o Azurite
- Se você vir o erro a seguir no Windows (é um bug) ao tentar executar o projeto criado.
- Isso pode ser resolvido executando este comando no PowerShell
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
mais informações sobre isso podem ser encontradas aqui e aqui
Próximas etapas
Para obter mais informações sobre o SDK do Azure, consulte este site
Publicação
- Siga as instruções aqui para criar e publicar seu Aplicativo Azure. </azure/azure-functions/functions-develop-vs?tabs=in-process#publish-to-azure>
- Para determinar o ponto de extremidade de postagem publicado, combine o ponto de extremidade de função do azure criado, encaminhe para o ouvinte e o código do ouvinte, o código de escuta pode ser encontrado navegando até o aplicativo de funções do azure, selecionando "Chaves de Aplicativo" e copiando o valor de AuthenticationEvents_extension.
- Por exemplo: "https://azureautheventstriggerdemo.azurewebsites.net/runtime/webhooks/AuthenticationEvents?code=(AuthenticationEvents_extension_key)& function=OnTokenIssuanceStart"
- Verifique se o ambiente de produção tem as configurações de aplicativo corretas para autenticação de token.
- Mais uma vez, você pode testar a função publicada postando a carga acima no novo ponto de extremidade.
Participante
Para obter detalhes sobre como contribuir para esse repositório, consulte o guia de contribuição.
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite https://cla.microsoft.com.
Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios usando nosso CLA.
Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.
Azure SDK for JavaScript