Autenticação e autorização no Azure App Service e Azure FunctionsAuthentication and authorization in Azure App Service and Azure Functions

O Azure App Service fornece suporte de autenticação e autorização incorporado, para que possa iniciar súplica nos utilizadores e aceder aos dados escrevendo código mínimo ou nenhum na sua aplicação web, API RESTful e back end móvel, e também Azure Functions.Azure App Service provides built-in authentication and authorization support, so you can sign in users and access data by writing minimal or no code in your web app, RESTful API, and mobile back end, and also Azure Functions. Este artigo descreve como o Serviço de Aplicações ajuda a simplificar a autenticação e a autorização para a sua aplicação.This article describes how App Service helps simplify authentication and authorization for your app.

A autenticação e autorização seguras requerem uma compreensão profunda da segurança, incluindo federação, encriptação, gestão de tokens web JSON (JWT), tipos de subvenções,e assim por diante.Secure authentication and authorization require deep understanding of security, including federation, encryption, JSON web tokens (JWT) management, grant types, and so on. O Serviço de Aplicações fornece estes utilitários para que possa gastar mais tempo e energia na oferta de valor de negócio ao seu cliente.App Service provides these utilities so that you can spend more time and energy on providing business value to your customer.

Importante

Não é obrigado a utilizar esta funcionalidade para autenticação e autorização.You're not required to use this feature for authentication and authorization. Pode utilizar as funcionalidades de segurança agregadas na sua estrutura web de eleição, ou pode escrever os seus próprios utilitários.You can use the bundled security features in your web framework of choice, or you can write your own utilities. No entanto, tenha em mente que o Chrome 80 está a fazer alterações na sua implementação do SameSite para cookies (data de lançamento por volta de março de 2020), e a autenticação remota personalizada ou outros cenários que se baseiem na publicação de cookies cross-site podem ser quebrados quando os navegadores Chrome do cliente forem atualizados.However, keep in mind that Chrome 80 is making breaking changes to its implementation of SameSite for cookies (release date around March 2020), and custom remote authentication or other scenarios that rely on cross-site cookie posting may break when client Chrome browsers are updated. A solução alternativa é complexa porque precisa de suportar diferentes comportamentos SameSite para diferentes navegadores.The workaround is complex because it needs to support different SameSite behaviors for different browsers.

As versões core 2.1 e acima do ASP.NET hospedados pelo App Service já estão corrigidas para esta mudança de rutura e manuseem os navegadores Chrome 80 e mais antigos adequadamente.The ASP.NET Core 2.1 and above versions hosted by App Service are already patched for this breaking change and handle Chrome 80 and older browsers appropriately. Além disso, o mesmo patch para ASP.NET Quadro 4.7.2 foi implementado nas instâncias do Serviço de Aplicações ao longo de janeiro de 2020.In addition, the same patch for ASP.NET Framework 4.7.2 has been deployed on the App Service instances throughout January 2020. Para mais informações, consulte a atualização de cookies do Serviço de Aplicações Azure SameSite.For more information, see Azure App Service SameSite cookie update.

Nota

A função de Autenticação/Autorização também é por vezes referida como "Easy Auth".The Authentication/Authorization feature is also sometimes referred to as "Easy Auth".

Nota

Ativar esta funcionalidade fará com que todos os pedidos HTTP não seguros da sua aplicação sejam automaticamente redirecionados para HTTPS, independentemente da configuração da configuração do Serviço de Aplicações para impor HTTPS.Enabling this feature will cause all non-secure HTTP requests to your application to be automatically redirected to HTTPS, regardless of the App Service configuration setting to enforce HTTPS. Se necessário, pode requireHttps desativá-lo através da definição no ficheiro de configuração de definições auth, mas deve então ter o cuidado de garantir que nenhuma tokens de segurança seja transmitida através de ligações HTTP não seguras.If needed, you can disable this via the requireHttps setting in the auth settings configuration file, but you must then take care to ensure no security tokens ever get transmitted over non-secure HTTP connections.

Para obter informações específicas para aplicações móveis nativas, consulte a autenticação do Utilizador e a autorização para aplicações móveis com o Azure App Service.For information specific to native mobile apps, see User authentication and authorization for mobile apps with Azure App Service.

Como funcionaHow it works

No WindowsOn Windows

O módulo de autenticação e autorização funciona na mesma caixa de areia que o seu código de aplicação.The authentication and authorization module runs in the same sandbox as your application code. Quando está ativado, todos os pedidos HTTP de entrada passam por ele antes de serem tratados pelo código de aplicação.When it's enabled, every incoming HTTP request passes through it before being handled by your application code.

Um diagrama de arquitetura que mostra pedidos sendo intercetados por um processo na caixa de areia do site que interage com fornecedores de identidade antes de permitir o tráfego para o site implantado

Este módulo lida com várias coisas para a sua aplicação:This module handles several things for your app:

  • Autentica os utilizadores com o fornecedor especificadoAuthenticates users with the specified provider
  • Valida, lojas e refreshes tokensValidates, stores, and refreshes tokens
  • Gere a sessão autenticadaManages the authenticated session
  • Injeta informação de identidade em cabeçalhos de pedidoInjects identity information into request headers

O módulo funciona separadamente do seu código de aplicação e é configurado usando as definições de aplicações.The module runs separately from your application code and is configured using app settings. Não são necessários SDKs, linguagens específicas ou alterações ao seu código de aplicação.No SDKs, specific languages, or changes to your application code are required.

Em contentoresOn Containers

O módulo de autenticação e autorização funciona num recipiente separado, isolado do seu código de aplicação.The authentication and authorization module runs in a separate container, isolated from your application code. Utilizando o que é conhecido como o padrão Ambassador,interage com o tráfego de entrada para executar funcionalidades semelhantes às do Windows.Using what's known as the Ambassador pattern, it interacts with the incoming traffic to perform similar functionality as on Windows. Uma vez que não funciona em processo, não é possível uma integração direta com quadros linguísticos específicos; no entanto, as informações relevantes de que a sua aplicação necessita são transmitidas através de cabeçalhos de pedido, conforme explicado abaixo.Because it does not run in-process, no direct integration with specific language frameworks is possible; however, the relevant information that your app needs is passed through using request headers as explained below.

Reclamações de utilizador/aplicaçãoUser/Application claims

Para todos os quadros linguísticos, o Serviço de Aplicações coloca as reclamações no token de entrada (seja de um utilizador final autenticado ou de uma aplicação de cliente) disponível para o seu código, injetando-as nos cabeçalhos de pedido.For all language frameworks, App Service makes the claims in the incoming token (whether that be from an authenticated end user or a client application) available to your code by injecting them into the request headers. Para ASP.NET aplicações 4.6, o Serviço de Aplicações povoa ClaimsPrincipal.Current com as reclamações do utilizador autenticado, para que possa seguir o padrão de código .NET, incluindo o [Authorize] atributo.For ASP.NET 4.6 apps, App Service populates ClaimsPrincipal.Current with the authenticated user's claims, so you can follow the standard .NET code pattern, including the [Authorize] attribute. Da mesma forma, para aplicações PHP, o Serviço de Aplicações povoa a _SERVER['REMOTE_USER'] variável.Similarly, for PHP apps, App Service populates the _SERVER['REMOTE_USER'] variable. Para aplicações Java, as reclamações estão acessíveis a partir do servlet Tomcat.For Java apps, the claims are accessible from the Tomcat servlet.

Para funções Azure, ClaimsPrincipal.Current não é preenchido para código .NET, mas ainda pode encontrar as reclamações do utilizador nos cabeçalhos de pedido, ou obter o objeto do contexto de pedido ou mesmo através de um parâmetro de ClaimsPrincipal ligação.For Azure Functions, ClaimsPrincipal.Current is not populated for .NET code, but you can still find the user claims in the request headers, or get the ClaimsPrincipal object from the request context or even through a binding parameter. Consulte o trabalho com as identidades dos clientes para obter mais informações.See working with client identities for more information.

Para obter mais informações, consulte as reclamações do utilizador do Access.For more information, see Access user claims.

Nota

Neste momento, ASP.NET Core não suporta atualmente a população do utilizador atual com a funcionalidade Autenticação/Autorização.At this time, ASP.NET Core does not currently support populating the current user with the Authentication/Authorization feature. No entanto, existem cerca de 3º partido, existem componentes de middleware de código aberto para ajudar a preencher esta lacuna.However, some 3rd party, open source middleware components do exist to help fill this gap.

Arquivo de tokensToken store

O App Service fornece uma loja de tokens incorporada, que é um repositório de fichas que estão associadas aos utilizadores das suas aplicações web, APIs ou aplicações móveis nativas.App Service provides a built-in token store, which is a repository of tokens that are associated with the users of your web apps, APIs, or native mobile apps. Quando ativa a autenticação com qualquer fornecedor, esta loja de token está imediatamente disponível para a sua aplicação.When you enable authentication with any provider, this token store is immediately available to your app. Se o seu código de aplicação necessitar de aceder aos dados destes fornecedores em nome do utilizador, tais como:If your application code needs to access data from these providers on the user's behalf, such as:

  • post na linha temporal do Facebook do utilizador autenticadopost to the authenticated user's Facebook timeline
  • ler os dados corporativos do utilizador usando a API do Gráfico microsoftread the user's corporate data using the Microsoft Graph API

Normalmente, deve escrever código para recolher, armazenar e refrescar estes tokens na sua aplicação.You typically must write code to collect, store, and refresh these tokens in your application. Com a loja de fichas, basta recuperar os tokens quando precisar e dizer ao Serviço de Aplicações para os refrescar quando ficarem inválidos.With the token store, you just retrieve the tokens when you need them and tell App Service to refresh them when they become invalid.

Os tokens de ID, tokens de acesso e tokens de atualização estão em cache para a sessão autenticada, e são acessíveis apenas pelo utilizador associado.The ID tokens, access tokens, and refresh tokens are cached for the authenticated session, and they're accessible only by the associated user.

Se não precisar de trabalhar com fichas na sua aplicação, pode desativar a loja simbólica na página de Autenticação/Autorização da sua aplicação.If you don't need to work with tokens in your app, you can disable the token store in your app's Authentication / Authorization page.

Registo e rastreioLogging and tracing

Se ativar a sessão de registo de aplicações,verá vestígios de autenticação e autorização diretamente nos seus ficheiros de registo.If you enable application logging, you will see authentication and authorization traces directly in your log files. Se vir um erro de autenticação que não esperava, pode convenientemente encontrar todos os detalhes olhando para os registos de aplicações existentes.If you see an authentication error that you didn't expect, you can conveniently find all the details by looking in your existing application logs. Se ativar o rastreio de pedidos falhados,pode ver exatamente qual o papel que o módulo de autenticação e autorização poderá ter desempenhado num pedido falhado.If you enable failed request tracing, you can see exactly what role the authentication and authorization module may have played in a failed request. Nos registos de vestígios, procure referências a um módulo chamado EasyAuthModule_32/64 .In the trace logs, look for references to a module named EasyAuthModule_32/64.

Fornecedores de identidadeIdentity providers

O Serviço de Aplicações utiliza identidade federada,na qual um fornecedor de identidade de terceiros gere as identidades do utilizador e o fluxo de autenticação para si.App Service uses federated identity, in which a third-party identity provider manages the user identities and authentication flow for you. Cinco fornecedores de identidade estão disponíveis por padrão:Five identity providers are available by default:

FornecedorProvider Ponto final de inscriçãoSign-in endpoint
Azure Active DirectoryAzure Active Directory /.auth/login/aad
Conta MicrosoftMicrosoft Account /.auth/login/microsoftaccount
FacebookFacebook /.auth/login/facebook
GoogleGoogle /.auth/login/google
TwitterTwitter /.auth/login/twitter
Qualquer fornecedor de Ligação OpenID (pré-visualização)Any OpenID Connect provider (preview) /.auth/login/<providerName>

Quando permite a autenticação e autorização com um destes fornecedores, o seu ponto final de inscrição está disponível para autenticação do utilizador e para validação de fichas de autenticação do fornecedor.When you enable authentication and authorization with one of these providers, its sign-in endpoint is available for user authentication and for validation of authentication tokens from the provider. Pode fornecer aos seus utilizadores qualquer uma destas opções de inscrição com facilidade.You can provide your users with any number of these sign-in options with ease.

Existe um caminho de extensibilidade para a integração com outros fornecedores de identidade ou uma solução de auth personalizada, mas isso não é recomendado.A legacy extensibility path exists for integrating with other identity providers or a custom auth solution, but this is not recommended. Em vez disso, considere utilizar o suporte OpenID Connect.Instead, consider using the OpenID Connect support.

Fluxo de autenticaçãoAuthentication flow

O fluxo de autenticação é o mesmo para todos os fornecedores, mas difere consoante pretenda iniciar súbência com o SDK do fornecedor:The authentication flow is the same for all providers, but differs depending on whether you want to sign in with the provider's SDK:

  • Sem provedor SDK: Os delegados de aplicação federaram o s-in no Serviço de Aplicações.Without provider SDK: The application delegates federated sign-in to App Service. Este é normalmente o caso das aplicações do navegador, que podem apresentar a página de login do fornecedor ao utilizador.This is typically the case with browser apps, which can present the provider's login page to the user. O código do servidor gere o processo de inscrição, pelo que também é chamado de fluxo direcionado para o servidor ou fluxo do servidor.The server code manages the sign-in process, so it is also called server-directed flow or server flow. Este caso aplica-se a aplicações de navegador.This case applies to browser apps. Aplica-se também a aplicações nativas que assinam os utilizadores na utilização do cliente de Aplicações Móveis SDK porque o SDK abre uma visão web para iniciar súmido com a autenticação do Serviço de Aplicações.It also applies to native apps that sign users in using the Mobile Apps client SDK because the SDK opens a web view to sign users in with App Service authentication.
  • Com o fornecedor SDK: A aplicação assina os utilizadores no fornecedor manualmente e, em seguida, submete o token de autenticação ao Serviço de Aplicações para validação.With provider SDK: The application signs users in to the provider manually and then submits the authentication token to App Service for validation. Este é normalmente o caso de aplicações sem navegador, que não podem apresentar a página de início de sção do fornecedor ao utilizador.This is typically the case with browser-less apps, which can't present the provider's sign-in page to the user. O código de aplicação gere o processo de inscrição, pelo que também é chamado de fluxo dirigido ao cliente ou fluxo de clientes.The application code manages the sign-in process, so it is also called client-directed flow or client flow. Este caso aplica-se a CLIENTES DE REST APIs, Azure Functionse JavaScript, bem como aplicações de navegador que precisam de mais flexibilidade no processo de login.This case applies to REST APIs, Azure Functions, and JavaScript browser clients, as well as browser apps that need more flexibility in the sign-in process. Aplica-se também a aplicações móveis nativas que assinam os utilizadores na utilização do SDK do fornecedor.It also applies to native mobile apps that sign users in using the provider's SDK.

Nota

As chamadas de uma aplicação de navegador fidedigna no Serviço de Aplicações para outra API REST no Serviço de Aplicações ou Funções Azure podem ser autenticadas usando o fluxo dirigido pelo servidor.Calls from a trusted browser app in App Service to another REST API in App Service or Azure Functions can be authenticated using the server-directed flow. Para mais informações, consulte Personalizar a autenticação e autorização no Serviço de Aplicações.For more information, see Customize authentication and authorization in App Service.

A tabela abaixo mostra os passos do fluxo de autenticação.The table below shows the steps of the authentication flow.

PassoStep Sem fornecedor SDKWithout provider SDK Com fornecedor SDKWith provider SDK
1. Iniciar s inscrição no utilizador1. Sign user in Redireciona o cliente para /.auth/login/<provider> .Redirects client to /.auth/login/<provider>. O código do cliente assina diretamente com o SDK do fornecedor e recebe um token de autenticação.Client code signs user in directly with provider's SDK and receives an authentication token. Para obter informações, consulte a documentação do fornecedor.For information, see the provider's documentation.
2. Pós-autenticação2. Post-authentication O fornecedor redireciona o cliente para /.auth/login/<provider>/callback .Provider redirects client to /.auth/login/<provider>/callback. O código do cliente publica o token do fornecedor para /.auth/login/<provider> validação.Client code posts token from provider to /.auth/login/<provider> for validation.
3. Estabelecer sessão autenticada3. Establish authenticated session O Serviço de Aplicações adiciona cookie autenticado à resposta.App Service adds authenticated cookie to response. O Serviço de Aplicações devolve o seu próprio token de autenticação ao código do cliente.App Service returns its own authentication token to client code.
4. Servir conteúdo autenticado4. Serve authenticated content O cliente inclui cookie de autenticação em pedidos posteriores (tratado automaticamente por navegador).Client includes authentication cookie in subsequent requests (automatically handled by browser). O código do cliente apresenta um token de autenticação no X-ZUMO-AUTH cabeçalho (manuseado automaticamente por SDKs cliente de Aplicações Móveis).Client code presents authentication token in X-ZUMO-AUTH header (automatically handled by Mobile Apps client SDKs).

Para os navegadores de clientes, o Serviço de Aplicações pode automaticamente direcionar todos os utilizadores não autenticados para /.auth/login/<provider> .For client browsers, App Service can automatically direct all unauthenticated users to /.auth/login/<provider>. Também pode apresentar aos utilizadores um ou mais /.auth/login/<provider> links para iniciar sôm na sua app utilizando o seu fornecedor de eleição.You can also present users with one or more /.auth/login/<provider> links to sign in to your app using their provider of choice.

Comportamento da autorizaçãoAuthorization behavior

No portal Azure,pode configurar a autorização do Serviço de Aplicações com vários comportamentos quando o pedido de entrada não for autenticado.In the Azure portal, you can configure App Service authorization with a number of behaviors when incoming request is not authenticated.

Uma imagem mostrando o dropdown "Action to take when request is not autenticado"

Os seguintes títulos descrevem as opções.The following headings describe the options.

Permitir pedidos anónimos (sem ação)Allow Anonymous requests (no action)

Esta opção adia a autorização de tráfego não autenticado para o seu código de aplicação.This option defers authorization of unauthenticated traffic to your application code. Para pedidos autenticados, o Serviço de Aplicações também transmite informações de autenticação nos cabeçalhos HTTP.For authenticated requests, App Service also passes along authentication information in the HTTP headers.

Esta opção proporciona mais flexibilidade no tratamento de pedidos anónimos.This option provides more flexibility in handling anonymous requests. Por exemplo, permite apresentar vários fornecedores de inscrição aos seus utilizadores.For example, it lets you present multiple sign-in providers to your users. No entanto, tem de escrever código.However, you must write code.

Permitir apenas pedidos autenticadosAllow only authenticated requests

A opção é iniciar sessão com <provider>.The option is Log in with <provider>. O Serviço de Aplicações redireciona todos os pedidos anónimos /.auth/login/<provider> para o fornecedor que escolher.App Service redirects all anonymous requests to /.auth/login/<provider> for the provider you choose. Se o pedido anónimo vier de uma aplicação móvel nativa, a resposta devolvida é uma HTTP 401 Unauthorized .If the anonymous request comes from a native mobile app, the returned response is an HTTP 401 Unauthorized.

Com esta opção, não precisa de escrever nenhum código de autenticação na sua aplicação.With this option, you don't need to write any authentication code in your app. A autorização mais fina, como a autorização específica para a função, pode ser tratada inspecionando as reclamações do utilizador (ver pedidos do utilizador do Access).Finer authorization, such as role-specific authorization, can be handled by inspecting the user's claims (see Access user claims).

Atenção

Restringir o acesso desta forma aplica-se a todas as chamadas para a sua app, o que pode não ser desejável para aplicações que pretendam uma página inicial disponível ao público, como em muitas aplicações de uma página única.Restricting access in this way applies to all calls to your app, which may not be desirable for apps wanting a publicly available home page, as in many single-page applications.

Nota

Por predefinição, qualquer utilizador do seu inquilino Azure AD pode solicitar um sinal para a sua aplicação a Azure AD.By default, any user in your Azure AD tenant can request a token for your application from Azure AD. Pode configurar a aplicação em Azure AD se quiser restringir o acesso à sua aplicação a um conjunto definido de utilizadores.You can configure the application in Azure AD if you want to restrict access to your app to a defined set of users.

Mais recursosMore resources

Guias específicos do fornecedor:Provider-specific how-to guides: