Compartilhar via


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

Aplica-se a: Círculo verde com um símbolo de marca de seleção branca 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 branca que indica que o conteúdo a seguir se aplica a locatários externos. Locatários externos (saiba mais)

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

Neste tutorial, você:

  • Atualizar um aplicativo Web Do 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 no Tutorial: Adicionar entrada a um aplicativo Web Do Python Flask usando a plataforma de identidade da Microsoft.

Definir escopos e ponto de extremidade de API

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

No arquivo .env , 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. Passe o ponto de extremidade da API para a home page. Isso permite que você chame seu ponto de extremidade. Atualize a / rota para ter a aparência mostrada no seguinte snippet 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 snippet de código a seguir. Passamos a lista de escopos que nosso aplicativo 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 arquivo 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 requests.get(...) método. Na solicitação, nossa URL de API downstream é especificada app_config.ENDPOINT e o token de acesso passado no Authorization campo 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 api_result variável e passada para o display.html modelo para renderização.

Exibir resultados da API

Crie um arquivo chamado display.html na pasta de modelos . Esta página exibe 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 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. Você vê uma página de entrada.

  3. Entre com sua conta da Microsoft seguindo as etapas. É solicitado que você forneça um endereço de email e uma senha para entrar.

  4. Se houver escopos necessários para o aplicativo, uma tela de consentimento será apresentada. O aplicativo solicita permissão para manter o acesso aos dados aos quais você permite acesso e entrar. Selecione Aceitar. Essa tela não será exibida se nenhum escopo for definido.

Chamar API

  1. Selecione chamar um link de API na home page. 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 Logoff para sair do aplicativo. Você será solicitado a escolher uma conta para sair. Selecione a conta usada para entrar.

Material de referência

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