Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:
Locatários da força de trabalho
Locatários externos (saiba mais)
Este tutorial orienta você sobre como proteger um aplicativo Web Do Python Flask.
Neste tutorial, você:
- Criar um projeto do Python Flask
- Instalar as dependências necessárias
- Configurar seu aplicativo Web Flask para usar a plataforma de identidade da Microsoft para autenticação
- Testar a experiência de entrada e saída em seu aplicativo Web Flask
Pré-requisitos
- Um locatário de força de trabalho. Você pode usar o Diretório Padrão ou configurar um novo locatário.
- Registre um novo aplicativo no Centro de administração do Microsoft Entra, configurado apenas para Contas neste diretório organizacional. Consulte Registrar um aplicativo para obter mais detalhes. Registre os seguintes valores na página visão geral do aplicativo para uso posterior:
- ID do aplicativo (cliente)
- ID do diretório (locatário)
- Adicione um segredo do cliente ao registro do aplicativo. Não use segredos do cliente em aplicativos de produção. Em vez disso, use certificados ou credenciais federadas. Para obter mais informações, consulte adicionar credenciais ao seu aplicativo.
- Python 3+.
- Visual Studio Code ou qualquer outro editor de código.
Criar um projeto do Flask
Crie uma pasta para hospedar seu aplicativo Flask, como flask-web-app.
Abra uma janela do console e mude para o diretório do aplicativo web Flask usando o comando
cd flask-web-appConfigurar o ambiente virtual
Dependendo do sistema operacional, execute os seguintes comandos para configurar seu ambiente virtual e ativá-lo:
Para o sistema operacional Windows:
py -m venv .venv .venv\scripts\activatePara o sistema operacional macOS ou Linux:
python3 -m venv .venv source .venv/bin/activate
Instalar dependências do aplicativo
Para instalar dependências de aplicativo, execute os seguintes comandos:
pip install flask
pip install python-dotenv
pip install requests
pip install "ms_identity_python[flask] @ git+https://github.com/azure-samples/ms-identity-python@0.9"
A biblioteca ms_identity_python que você instala instala automaticamente a MSAL (Biblioteca de Autenticação da Microsoft) para Python como sua dependência. O MSAL Python é a biblioteca que permite autenticar usuários e gerenciar seus tokens de acesso.
Depois de instalar as bibliotecas necessárias, atualize o arquivo de requisitos executando o seguinte comando:
pip freeze > requirements.txt
Configurar o aplicativo para autenticação
Aplicativos Web que conectam usuários usando a plataforma de identidade da Microsoft são configurados por meio de um arquivo de configuração, .env. No Python Flask, ele deve especificar os seguintes valores:
| Variável de ambiente | Description |
|---|---|
AUTHORITY |
A URL da instância de nuvem em que o aplicativo está registrado. Formato: https://{Instance}/{TenantId}. Use um dos seguintes valores de Instância:- https://login.microsoftonline.com/ (Nuvem pública do Azure)- https://login.microsoftonline.us/ (Azure Governo dos EUA)- https://login.microsoftonline.de/ (Microsoft Entra Alemanha)- https://login.partner.microsoftonline.cn/ (Microsoft Entra China, operado pela 21Vianet) |
TENANT_ID |
O identificador do locatário em que o aplicativo está registrado. Prefira a ID do locatário do registro do aplicativo ou use um dos seguintes: - organizations: conectar usuários em qualquer conta corporativa ou de estudante- common: conectar usuários com qualquer conta corporativa ou de estudante ou conta pessoal da Microsoft- consumers: conectar usuários com apenas uma conta pessoal da Microsoft |
CLIENT_ID |
Identificador do aplicativo (cliente) conforme obtido do registro do aplicativo. |
CLIENT_SECRET |
O valor secreto obtido da adição de credenciais no Centro de administração do Microsoft Entra. |
REDIRECT_URI |
O URI em que a plataforma de identidade da Microsoft envia tokens de segurança após a autenticação. |
Atualizar o ficheiro de configuração
Crie um arquivo .env na pasta raiz para armazenar com segurança a configuração do aplicativo. O arquivo .env deve conter as seguintes variáveis de ambiente:
CLIENT_ID="<Enter_your_client_id>" CLIENT_SECRET="<Enter_your_client_secret>" AUTHORITY="https://login.microsoftonline.com/<Enter_tenant_id>" REDIRECT_URI="<Enter_redirect_uri>"Substitua os espaços reservados pelos seguintes valores:
- Substitua
<Enter_your_client_id>pela ID do aplicativo (cliente) do aplicativo Web cliente que você registrou. - Substitua
<Enter_tenant_id>pela ID do Diretório (Locatário) em que você registrou seu aplicativo Web. - Substitua
<Enter_your_client_secret>pelo valor do segredo do cliente para o aplicativo Web que você criou. Neste tutorial, usamos segredos para fins de demonstração. Em produção, use abordagens mais seguras, como certificados ou credenciais de identidade federadas. - Substitua
<Enter_redirect_uri>pelo URI de redirecionamento que você registrou anteriormente. Este tutorial define o caminho do URI de redirecionamento comohttp://localhost:3000/getAToken.
- Substitua
Crie um arquivo app_config.py para ler as variáveis de ambiente e adicionar outras configurações necessárias.
import os AUTHORITY = os.getenv("AUTHORITY") CLIENT_ID = os.getenv("CLIENT_ID") CLIENT_SECRET = os.getenv("CLIENT_SECRET") REDIRECT_URI = os.getenv("REDIRECT_URI") SESSION_TYPE = "filesystem" # Tells the Flask-session extension to store sessions in the filesystem. Don't use in production apps.
Configure os pontos de extremidade do aplicativo
Nesta etapa, você cria os endpoints do web app e adiciona a lógica de negócios à sua aplicação.
Crie um arquivo chamado app.py na pasta raiz.
Importe as dependências necessárias na parte superior do arquivo app.py .
import os import requests from flask import Flask, render_template from identity.flask import Auth import app_configInicialize seu aplicativo Flask e configure-o para usar o tipo de armazenamento de sessão especificado em seu arquivo app_config.py .
app = Flask(__name__) app.config.from_object(app_config)Inicialize o cliente do aplicativo. Um aplicativo Web Flask é um cliente confidencial. Passamos o segredo do cliente porque os clientes confidenciais podem armazená-lo com segurança. Nos bastidores, a biblioteca de identidade chama a classe
ConfidentialClientApplicationda biblioteca MSAL.auth = Auth( app, authority=app.config["AUTHORITY"], client_id=app.config["CLIENT_ID"], client_credential=app.config["CLIENT_SECRET"], redirect_uri=app.config["REDIRECT_URI"] )Adicione os endpoints necessários ao aplicativo Flask. O aplicativo da web usa o fluxo de código de autorização para autenticar o usuário. A biblioteca de wrapper ms_identity_python do MSAL ajuda na interação com a biblioteca MSAL, facilitando a adição de funcionalidades de logon e logout ao seu aplicativo. Adicionamos uma página de índice e a protegemos usando o
login_requireddecorador fornecido pela biblioteca de ms_identity_python . Ologin_requireddecorador garante que somente usuários autenticados possam acessar a página de índice.@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", )O usuário tem a garantia de estar presente porque decoramos essa exibição com
@login_required.
Criar os modelos de aplicativo
Crie uma pasta chamada modelos na pasta raiz. Na pasta de modelos, crie um arquivo chamado index.html. Esta é a home page do aplicativo. Adicione o seguinte código ao arquivo index.html :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<h2>Welcome {{ user.get("name") }}!</h2>
<img src="https://github.com/Azure-Samples/ms-identity-python-webapp-django/raw/main/static/topology.png" alt="Topology">
<ul>
{% if api_endpoint %}
<!-- If an API endpoint is declared and scopes defined, this link will show. We set this in the call an API tutorial. For this tutorial, we do not define this endpoint. -->
<li><a href='/call_api'>Call an API</a></li>
{% endif %}
<li><a href="{{ url_for('identity.logout') }}">Logout</a></li>
</ul>
<hr>
<footer style="text-align: right">{{ title }}</footer>
</body>
</html>
Executar e testar o aplicativo Web de exemplo
No terminal, execute o seguinte comando:
python3 -m flask run --debug --host=localhost --port=3000Você pode usar a porta da sua escolha. Essa porta deve ser semelhante à porta do URI de redirecionamento que você registrou anteriormente.
Abra o navegador e vá para
http://localhost:3000. Você vê uma página de login.Entre com sua conta da Microsoft seguindo as etapas. É solicitado que você forneça um endereço de email e uma senha para entrar.
Caso o aplicativo exija algum escopo, será apresentada uma tela de consentimento. O aplicativo solicita permissão para manter o acesso aos quais você permite acesso e para realizar o logon em sua conta. Selecione Aceitar. Essa tela não será exibida se nenhum escopo for definido.
Depois de entrar ou se inscrever, você será redirecionado de volta para o aplicativo Web. Você verá uma página semelhante à seguinte captura de tela:
Selecione Logoff para sair do aplicativo. Será solicitado que você escolha uma conta da qual sair. Selecione a conta usada para entrar.
Usar domínio de URL personalizado (opcional)
Os locatários da força de trabalho não dão suporte a domínios de URL personalizados.