Acionador de Eventos de Autenticação para Funções do Azure biblioteca de cliente para Node
O Acionador de Eventos de Autenticação para Funções do Azure processa todo o processamento de back-end (por exemplo, a validação do esquema de token/json) para pedidos Http recebidos para eventos de Autenticação. Além disso, fornece ao programador um modelo de objeto com uma versão forte para trabalhar, o que significa que o programador não precisa de ter conhecimento prévio do pedido e dos payloads de json de resposta.
Esta arquitetura de projeto fornece as seguintes funcionalidades:
- Validação de tokens para proteger a chamada à API
- Modelo de objeto, escrita e intellisense de IDE
- Validação de entrada e saída dos esquemas de pedido e resposta da API
- Controlo de versões
- Não precisa de código automático.
Introdução
Instalar o pacote npm
npm install @azure/functions-authentication-events
Pré-requisitos
- Ferramentas de funções do Azure
- Ferramentas do Azure Function Core
- Se estiver a utilizar o Visual Studio Code, as seguintes extensões:
Autenticar o Cliente
Quando Azure AD serviço de eventos de autenticação chama a extensão personalizada, envia um Authorization
cabeçalho com um Bearer {token}
. Este token representará uma autenticação serviço a serviço na qual:
- O "recurso", também conhecido como audiência, é a aplicação que regista para representar a sua API. Isto é representado pela
aud
afirmação no token. - O "cliente" é uma aplicação da Microsoft que representa o serviço de eventos de autenticação Azure AD. Tem um
appId
valor de99045fe1-7639-4a75-9d4a-577b6ca3810f
. Isto é representado por:- A
azp
afirmação no token se a propriedade da aplicaçãoaccessTokenAcceptedVersion
estiver definida como2
. - A
appid
afirmação no token se a propriedade da aplicação deaccessTokenAcceptedVersion
recurso estiver definida como1
ounull
.
- A
Existem três abordagens para lidar com o token. Pode personalizar o comportamento com as definições da aplicação , conforme mostrado abaixo ou através do ficheiro local.settings.json em ambientes locais.
Validar tokens com a integração de autenticação Funções do Azure Azure AD
Ao executar a sua função na produção, é altamente recomendado utilizar a integração de autenticação Funções do Azure Azure AD para validar tokens de entrada.
- Aceda ao separador "Autenticação" na Aplicação de Funções
- Clique em "Adicionar fornecedor de identidade"
- Selecione "Microsoft" como fornecedor de identidade
- Selecione "Indique os detalhes de um registo de aplicação existente"
- Introduza o
Application ID
da aplicação que representa a sua API no Azure AD
O emissor e a audiência permitida dependem da propriedade da sua aplicação accessTokenAcceptedVersion
(pode ser encontrado no "Manifesto" da aplicação).
Se a accessTokenAcceptedVersion
propriedade estiver definida como 2
: 6. Defina o Issuer URL to "https://login.microsoftonline.com/{tenantId}/v2.0" 7. Set an 'Allowed Audience' to the Application ID (
appId')
Se a 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
identificadorUri). It should be in the format of
api://{azureFunctionAppNameaccessTokenAcceptedVersion
}.azurewebsites.net/{resourceApiAppId}or
api://{FunctionAppFullyQualifiedDomainName}/{resourceApiAppId}' se estiver a utilizar um nome de domínio personalizado.
Por predefinição, o acionador de eventos de Autenticação validará que a integração de autenticação da Função do Azure está configurada e verificará se o cliente no token está definido como 99045fe1-7639-4a75-9d4a-577b6ca3810f
(através das azp
afirmações ou appid
no token).
Se quiser testar a API em relação a outro cliente que não esteja Azure AD serviço de eventos de autenticação, como utilizar o Postman, pode configurar uma definição de aplicação opcional:
- AuthenticationEvents__CustomCallerAppId - o guid do cliente pretendido. Se não for fornecido,
99045fe1-7639-4a75-9d4a-577b6ca3810f
é assumido.
Fazer com que o acionador valide o token
Em ambientes locais ou ambientes que não estão alojados no serviço de Funções do Azure, o acionador pode fazer a validação do token. Defina as seguintes definições de aplicação:
- AuthenticationEvents__TenantId - o seu ID de inquilino
- AuthenticationEvents__AudienceAppId - o mesmo valor que "Audiência permitida" na opção 1.
- AuthenticationEvents__CustomCallerAppId (opcional) – o guid do cliente pretendido. Se não for fornecido,
99045fe1-7639-4a75-9d4a-577b6ca3810f
é assumido.
Um ficheiro de exemplo local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"AuthenticationEvents__TenantId": "8615397b-****-****-****-********06c8",
"AuthenticationEvents__AudienceAppId": "api://46f98993-****-****-****-********0038",
"AuthenticationEvents__CustomCallerAppId": "46f98993-****-****-****-********0038"
}
}
Sem validação de tokens
Se quiser não autenticar o token durante o desenvolvimento local, defina a seguinte definição de aplicação:
- AuthenticationEvents__BypassTokenValidation - o valor de
true
fará com que o acionador não verifique a validação do token.
Início Rápido
- Visual Studio Code
- Inicie o Visual Studio Code.
- Executar o comando
func init . --worker-runtime node
de terminal através da paleta de comandos - Executar o comando
func new
de terminal através da paleta de comandos - Siga as instruções de criação do projeto
- Executar o comando
npm install @azure/functions-authentication-events
de terminal através da paleta de comandos - Executar o comando
npm install
de terminal através da paleta de comandos - Executar o comando
npm run-script build
de terminal através da paleta de comandos
- Para fins de desenvolvimento, mude a validação de tokens para teste:
- Adicione a AuthenticationEvents__BypassTokenValidation chave de aplicação à secção "Valores" no ficheiro local.settings.json e defina o valor como verdadeiro. Se não tiver um ficheiro local.settings.json no seu ambiente local, crie um na raiz da Aplicação de Funções.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "node",
"AuthenticationEvents__BypassTokenValidation": true
}
}
- Assim que o projeto for carregado, pode executar o código de exemplo e deverá ver a aplicação do programador das funções do Azure a carregar o ponto final.
Conceitos-chave
Os principais conceitos do SDK .NET do Azure podem ser encontrados aqui
Documentação
Uma função foi publicada, há uma boa leitura sobre o registo e as métricas que podem ser encontradas aqui
Para obter a Documentação da API, veja o (Link TBD)
Assim que esta ação mudar para a pré-visualização, exceto se não houver alterações interruptivas e será tão simples como remover a origem nuget que aponta para a pré-visualização privada.
Exemplos
Para Testar o Aumento de Tokens, faça o seguinte.
- Abra o projeto que foi criado no passo anterior. (Início Rápido)
- Execute a Aplicação.
func host start
- Assim que a aplicação do programador das funções do Azure for iniciada, copie o URL de escuta que é apresentado com a aplicação.
- Nota: todas as funções de Autenticação estão listadas, caso tenhamos um serviço de escuta de função registado chamado "OnTokenIssuanceStart"
- O ponto final da função será, em seguida, uma combinação do URL e da função de escuta, por exemplo: "http://localhost:7071/runtime/webhooks/AuthenticationEvents?code=(YOUR_CODE)& function=OnTokenIssuanceStart"
- Publique o seguinte payload com algo como o Postman ou o Fiddler.
- Pode encontrar os passos para utilizar o Postman (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"
}
}
}
}
- Deverá ver esta resposta:
{
"data": {
"@odata.type": "microsoft.graph.onTokenIssuanceStartResponseData",
"actions": [
{
"@odata.type": "ProvideClaimsForToken",
"claims": [
{
"DateOfBirth": "01/01/2000"
},
{
"CustomRoles": [
"Writer",
"Editor"
]
}
]
}
]
}
}
Resolução de problemas
- Visual Studio Code
- Se estiver a ser executado no Visual Studio Code, receberá um erro na linha do Emulador de Armazenamento do Azure local indisponível, pode iniciar o emulador manualmente.! (Nota: o emulador do Armazenamento do Azure foi preterido e a substituição sugerida é Azurite)
- Se estiver a utilizar o Visual Studio Code no Mac, utilize o Azurite
- Se vir o seguinte erro no Windows (é um erro) ao tentar executar o projeto criado.
- Isto pode ser resolvido ao executar este comando no PowerShell
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
. Pode encontrar mais informações aqui e aqui
Passos seguintes
Para obter mais informações sobre o SDK do Azure, veja este site
Publicar
- Siga as instruções aqui para criar e publicar a sua Aplicação Azure. </azure/azure-functions/functions-develop-vs?tabs=in-process#publish-to-azure>
- Para determinar o ponto final de publicação publicado, combinar o ponto final da função do Azure que criou, encaminhar para o serviço de escuta e o código do serviço de escuta, pode encontrar o código de escuta ao navegar para a sua aplicação de função do Azure, selecionar "Chaves de Aplicação" e copiar o valor de AuthenticationEvents_extension.
- Por exemplo: "https://azureautheventstriggerdemo.azurewebsites.net/runtime/webhooks/AuthenticationEvents?code=(AuthenticationEvents_extension_key)& function=OnTokenIssuanceStart"
- Certifique-se de que o ambiente de produção tem as definições de aplicação corretas para a autenticação de tokens.
- Mais uma vez, pode testar a função publicada ao publicar o payload acima no novo ponto final.
Contribuir
Para obter detalhes sobre como contribuir para este repositório, veja o guia de contribuição.
Agradecemos todas as contribuições e sugestões para este projeto. A maioria das contribuições requerem que celebre um Contrato de Licença de Contribuição (CLA) no qual se declare que tem o direito de conceder e que, na verdade, concede-nos os direitos para utilizar a sua contribuição. Para mais detalhes, visite https://cla.microsoft.com.
Quando submete um pedido Pull, um bot do CLA determina automaticamente se tem de fornecer um CLA e decorar o PR de forma adequada (por exemplo, etiqueta, comentário). Só tem de seguir as instruções fornecidas pelo bot. Só terá de o fazer uma vez em todos os repositórios com o nosso CLA.
Este projeto adotou o Microsoft Open Source Code of Conduct (Código de Conduta do Microsoft Open Source). Para obter mais informações, consulte as FAQ do Código de Conduta ou contacte opencode@microsoft.com com quaisquer perguntas ou comentários adicionais.
Azure SDK for JavaScript