Partilhar via


Tutorial: Chamar a API do Microsoft Graph a partir de um aplicativo Web Python Flask

Aplica-se a: círculo verde com um símbolo de marca de verificação branco. Trabalhadores círculo verde com um símbolo de marca de verificação branco. Inquilinos externos (saber mais)

Neste tutorial, você chama a API do Microsoft Graph a partir de um aplicativo Web Python Flask. No tutorial anterior, você adicionou as experiências de entrada e saída ao aplicativo. Depois que um usuário entra, o aplicativo adquire um token de acesso para chamar a API do Microsoft Graph.

Neste tutorial, você:

  • Atualize um aplicativo web Python Flask existente para adquirir um token de acesso
  • Use o token de acesso para chamar a API do Microsoft Graph.

Pré-requisitos

Conclua as etapas em Tutorial: Adicionar início de sessão a um aplicativo Web Python Flask usando a plataforma de identidade da Microsoft.

Definir escopos e ponto de extremidade da API

Neste exemplo, chamamos a API do Microsoft Graph para obter as informações de perfil do usuário conectado. Se seu aplicativo estiver em um locatário da força de trabalho, ao entrar, o usuário consente com os escopos exigidos pelo aplicativo para acessar a API do Microsoft Graph. Se a sua aplicação estiver num inquilino externo, certifique-se de que concede consentimento de administrador em nome dos utilizadores no seu inquilino. Em seguida, o aplicativo usa o token de acesso para chamar a API e exibir os resultados.

No arquivo de .env do, adicione o ponto de extremidade que estamos chamando e os escopos necessários para chamar a API do Microsoft Graph:

SCOPE=User.Read
ENDPOINT=https://graph.microsoft.com/v1.0/me

Leia as novas configurações em seu aplicativo atualizando o arquivo app_config.py.

# other configs go here
SCOPE = os.getenv("SCOPE")
ENDPOINT = os.getenv("ENDPOINT")

Chamar uma API protegida

  1. Enviar o endpoint da API para a página inicial. Isto permite-te chamar o teu endpoint. Atualize a rota / para parecer com o mostrado no seguinte trecho de código:

    @app.route("/")
    @auth.login_required
    def index(*, context):
        return render_template(
            'index.html',
            user=context['user'],
            title="Flask Web App Sample",
            api_endpoint=os.getenv("ENDPOINT") # added this line
        )
    
  2. Chame a API protegida do Microsoft Graph, conforme mostrado no trecho de código a seguir. Passamos a lista de permissões que a nossa aplicação precisa usar. Se os escopos estiverem presentes, o contexto conterá um token de acesso. O token de acesso é usado para chamar a API downstream. Adicione este código ao ficheiro app.py:

    @app.route("/call_api")
    @auth.login_required(scopes=os.getenv("SCOPE", "").split())
    def call_downstream_api(*, context):
        api_result = requests.get(  # Use access token to call a web api
            os.getenv("ENDPOINT"),
            headers={'Authorization': 'Bearer ' + context['access_token']},
            timeout=30,
        ).json() if context.get('access_token') else "Did you forget to set the SCOPE environment variable?"
        return render_template('display.html', title="API Response", result=api_result)
    

    Se o aplicativo obtiver com êxito um token de acesso, ele fará uma solicitação HTTP para a API downstream usando o método requests.get(...). Na solicitação, nossa URL de API downstream é especificada em app_config.ENDPOINT e o token de acesso é passado no campo Authorization do cabeçalho da solicitação.

    Uma solicitação bem-sucedida para a API downstream (API do Microsoft Graph) retorna uma resposta JSON armazenada em uma variável api_result e passada para o modelo display.html para renderização.

Exibir resultados da API

Crie um ficheiro chamado display.html na pasta de modelos . Esta página mostra o resultado da chamada para o ponto de extremidade do Microsoft Graph. Adicione o seguinte código ao arquivo display.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Microsoft Identity Python Web App: API</title>
</head>
<body>
    <a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
    <h1>{{title}}</h1>
    <pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</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.

Chamar API

  1. Selecione o link Chamar uma API na página inicial. O aplicativo chama a API do Microsoft Graph para obter as informações de perfil do usuário conectado. O aplicativo exibe o resultado da chamada para a API.

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

Material de referência

O ms_identity_python abstrai os detalhes da biblioteca MSAL. Para obter mais informações, consulte documentação do MSAL para Python. Este material de referência ajuda você a entender como inicializar um aplicativo e adquirir tokens usando o MSAL Python.