Partilhar via


Tutorial: Iniciar sessão de utilizadores numa aplicação Web Python Flask utilizando a plataforma de identidade da Microsoft

Aplica-se a: círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica aos locatários da força de trabalho. Locatários da força de trabalho Círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica a locatários externos. 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.

Criar um projeto Flask

  1. Crie uma pasta para hospedar seu aplicativo Flask, como flask-web-app.

  2. 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-app
    
  3. Configurar 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\activate
    

    Para 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

  1. 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 como http://localhost:3000/getAToken.
  2. 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.

  1. Crie um arquivo chamado app.py em sua pasta raiz.

  2. 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_config
    
  3. Inicialize 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)
    
  4. 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 ConfidentialClientApplication da 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"]
    )
    
  5. 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_required fornecido pela biblioteca ms_identity_python. O decorador de login_required garante 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

  1. No seu terminal, execute o seguinte comando:

    python3 -m flask run --debug --host=localhost --port=3000
    

    Você pode usar a porta de sua escolha. Essa porta deve ser semelhante à porta do URI de redirecionamento que você registrou anteriormente.

  2. Abra o navegador e vá para http://localhost:3000. Vê uma página de início de sessão.

  3. 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.

  4. 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:

Screenshot do exemplo de aplicação web do Flask após a autenticação bem-sucedida.

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.