Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:
Locatários da força de trabalho
Inquilinos externos (saiba mais)
Este tutorial orienta você sobre como proteger um aplicativo Web Python Flask.
Neste tutorial, você:
- Criar um projeto Python Flask
- Instalar as dependências necessárias
- Configure seu aplicativo Web Flask para usar a plataforma de identidade da Microsoft para autenticação
- Teste a experiência de entrada e saída em seu aplicativo Web Flask
Pré-requisitos
- Um membro da força de trabalho. Você pode usar o seu diretório padrão ou configurar um novo inquilino.
- Registre um novo aplicativo no centro de administração do Microsoft Entra, configurado para Contas somente neste diretório organizacional. Consulte Registar uma candidatura para obter mais detalhes. Registre os seguintes valores na página Visão geral do aplicativo para uso posterior:
- ID da aplicação (cliente)
- ID do diretório (inquilino)
- Adicione um segredo de cliente ao registro do seu aplicativo. Não use segredos de 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 outro editor de código.
Criar um projeto Flask
Crie uma pasta para hospedar seu aplicativo Flask, como flask-web-app.
Abra uma janela da linha de comandos e navegue até ao diretório da pasta da sua aplicação Flask usando o comando
cd flask-web-appConfigurar ambiente virtual
Dependendo do seu 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 de aplicativos
Para instalar dependências de aplicativos, 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 Microsoft Authentication Library (MSAL) para Python como sua dependência. 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
As aplicações web que iniciam sessão de utilizadores através da Microsoft identity platform são configuradas através de um ficheiro de configuração, .env. No Python Flask, deve especificar os seguintes valores:
| Variável de ambiente | Description |
|---|---|
AUTHORITY |
O URL da instância na cloud onde a aplicação está registada. 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, operada pela 21Vianet) |
TENANT_ID |
O identificador do inquilino onde a aplicação está registada. Prefira o ID do inquilino do registo da aplicação, ou use um dos: - organizations: autenticar utilizadores em qualquer conta de trabalho ou escolar- common: iniciar sessão de utilizadores com qualquer conta profissional, de escola ou conta pessoal Microsoft- consumers: iniciar sessão apenas com uma conta pessoal Microsoft |
CLIENT_ID |
Identificador da aplicação (cliente) conforme obtido no registo da aplicação. |
CLIENT_SECRET |
O valor secreto obtido ao adicionar credenciais no centro de administração do Microsoft Entra. |
REDIRECT_URI |
O URI onde a plataforma de identidade Microsoft envia tokens de segurança após a autenticação. |
Atualizar o arquivo de configuração
Cria um ficheiro .env na tua pasta raiz para guardar em segurança a configuração da tua app. Seu arquivo de .env do 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 marcadores de posição pelos seguintes valores:
- Substitua
<Enter_your_client_id>pelo ID de Aplicação (cliente) do aplicativo Web cliente que registou. - Substitua
<Enter_tenant_id>pelo ID do Diretório (Locatário) onde registou a sua aplicação Web. - Substitua
<Enter_your_client_secret>pelo valor segredo do cliente para o aplicativo Web que você criou. Neste tutorial, usamos segredos para fins de demonstração. Na produção, use abordagens mais seguras, como certificados ou credenciais de identidade federada. - Substitua
<Enter_redirect_uri>pelo URI de redirecionamento registrado anteriormente. Este tutorial define o caminho de 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.
Configurar pontos de extremidade do aplicativo
Nesta etapa, criam-se os endpoints da aplicação web e adiciona-se a lógica de negócios à aplicação.
Crie um arquivo chamado app.py em sua 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 no 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. Internamente, 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 seu aplicativo Flask. A aplicação web usa o fluxo de código de autorização para autenticar o utilizador. A biblioteca de wrapper MSAL ms_identity_python ajuda a interagir com a biblioteca MSAL, facilitando assim a adição de login e logout ao seu aplicativo. Adicionamos uma página de índice e protegemo-la usando o decorador de
login_requiredfornecido pela biblioteca ms_identity_python. O decorador delogin_requiredgarante que apenas 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", )É garantido que o utilizador estará presente porque decorámos esta visualização com
@login_required.
Criar os modelos de aplicativo
Crie uma pasta chamada modelos na sua pasta raiz. Na pasta templates, crie um arquivo chamado index.html. Esta é a página inicial 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 seu terminal, execute o seguinte comando:
python3 -m flask run --debug --host=localhost --port=3000Você pode usar a porta de 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. Vê uma página de início de sessão.Inicie sessão com a sua conta Microsoft seguindo os passos. É-lhe pedido que forneça um endereço de e-mail e uma palavra-passe para iniciar sessão.
Se houver algum escopo necessário para o aplicativo, uma tela de consentimento é apresentada. O aplicativo solicita permissão para manter o acesso aos dados aos quais você permite acessar e para fazer login. Selecione Aceitar. Esta tela não aparecerá se nenhum escopo estiver definido.
Depois de iniciar sessão ou inscrever-se, é redirecionado de volta para a aplicação Web. Você verá uma página semelhante à seguinte captura de tela:
Selecione Sair para sair da aplicação. Você será solicitado a escolher uma conta da qual sair. Selecione a conta que utilizou para iniciar sessão.
Usar domínio de URL personalizado (opcional)
Os inquilinos do Workforce não suportam domínios de URL personalizados.