Integre o login do Microsoft 365 em Flask Web Apps

Integre o login do Microsoft 365 em Flask Web Apps
Integre o login do Microsoft 365 em Flask Web Apps

Configurando a autenticação do Microsoft 365

Ao desenvolver aplicações web para fins educacionais, a integração de recursos institucionais, como o e-mail do Microsoft 365, pode aprimorar a experiência do usuário e agilizar os processos de login. Esta integração é particularmente útil quando as aplicações precisam de se alinhar com as políticas de TI da universidade, o que pode restringir a criação de aplicações com credenciais universitárias.

Neste cenário, utilizar uma conta pessoal do Microsoft Azure para configurar a aplicação é uma solução prática. No entanto, podem surgir desafios, como problemas com restrições de inquilinos ao tentar fazer login com um e-mail universitário. Isto requer uma estratégia para gerir contas de utilizadores em diferentes inquilinos sem comprometer a funcionalidade ou a segurança da aplicação.

Comando Descrição
oauth.remote_app() Inicializa uma nova instância de aplicativo remoto para OAuth; ele é usado para lidar com a comunicação com provedores OAuth.
flask_oauthlib.client.OAuth Uma extensão Flask para integração de provedores de serviços OAuth, facilitando a autenticação por meio de protocolos OAuth.
authorized_response() Parte do Flask-OAuthlib, este método recupera a resposta OAuth autorizada da função de retorno de chamada.
session['oauth_token'] Usado para armazenar o token OAuth na sessão para acesso posterior, fundamental para gerenciar sessões de usuário e estado de autenticação.
microsoft.authorize() Um método que redireciona para a URL de autorização do provedor OAuth, onde o usuário pode autorizar o aplicativo.
url_for() Uma função auxiliar no Flask que gera um ponto final para uma determinada função de visualização. É útil para gerar URLs para redirecionamentos.

Explicando a integração do Flask com a autenticação do Microsoft 365

Os scripts de front-end e back-end juntos facilitam a integração do login do Microsoft 365 em um aplicativo da web Flask. No frontend, uma página HTML simples apresenta um botão que, ao ser clicado, aciona uma função JavaScript para redirecionar o usuário ao backend para autenticação. Este processo começa com o loginWithMicrosoft() função, que altera a localização da janela para a rota de back-end tratada pelo Flask. O script de back-end usa Flask e Flask-OAuthlib para gerenciar o fluxo OAuth com a plataforma de identidade da Microsoft.

No back-end, o oauth.remote_app() O comando configura uma conexão com endpoints OAuth da Microsoft usando credenciais de aplicativo. O microsoft.authorize() A função inicia o processo de autenticação redirecionando o usuário para a página de autorização da Microsoft. Depois que o usuário fizer login e conceder as permissões necessárias, o provedor OAuth as enviará de volta ao aplicativo usando o URL de retorno de chamada especificado em url_for('authorized'). O authorized_response() O método processa esse retorno de chamada, recuperando o token de acesso necessário para confirmar a autenticação e manter a sessão do usuário.

Interface de autenticação front-end do Microsoft 365

HTML e JavaScript usados ​​para frontend

<html>
<head>
<title>Login with Microsoft</title>
</head>
<body>
<button onclick="loginWithMicrosoft()">Sign In with Microsoft</button>
<script>
function loginWithMicrosoft() {
    window.location.href = '/auth/microsoft';
}
</script>
</body>
</html>

Fluxo de autenticação de back-end com Microsoft 365

Python e Flask usados ​​para back-end

from flask import Flask, redirect, url_for, session
from flask_oauthlib.client import OAuth
import os

app = Flask(__name__)
app.secret_key = 'development'
oauth = OAuth(app)

microsoft = oauth.remote_app(
    'microsoft',
    consumer_key='YOUR_APP_ID',
    consumer_secret='YOUR_APP_SECRET',
    request_token_params={'scope': 'User.Read'}
    base_url='https://graph.microsoft.com/v1.0/',
    request_token_url=None,
    access_token_method='POST',
    access_token_url='https://login.microsoftonline.com/common/oauth2/v2.0/token',
    authorize_url='https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
)

@app.route('/')
def index():
    return '<h1>Welcome to the Flask App</h1>' + '<a href="/login">Login with Microsoft</a>'

@app.route('/login')
def login():
    return microsoft.authorize(callback=url_for('authorized', _external=True))

@app.route('/login/authorized')
def authorized():
    response = microsoft.authorized_response()
    if response is None or response.get('access_token') is None:
        return 'Access denied: reason={0} error={1}'.format(
            request.args['error'], request.args['error_description'])
    session['oauth_token'] = (response['access_token'], '')
    return 'Logged in as id={0}'.format(session['oauth_token'])

@microsoft.tokengetter
def get_microsoft_oauth_token():
    return session.get('oauth_token')

if __name__ == '__main__':
    app.run(debug=True)

Configuração avançada para autenticação do Microsoft 365 no Flask

Para resolver a questão da integração do login do Microsoft 365 sem utilizar um e-mail gerido pela universidade, é essencial compreender o conceito de aplicações multi-inquilinos no Azure. Um aplicativo multilocatário permite que usuários de vários locatários do Azure AD acessem o aplicativo, o que é ideal para ambientes universitários onde os alunos podem ter emails de domínio diferentes. Esta configuração requer a configuração da aplicação Azure para aceitar entradas de qualquer inquilino AZure AD, o que é feito definindo o 'signInAudience' no manifesto da aplicação para 'AzureADMultipleOrgs'.

Essa mudança de configuração permite que os alunos utilizem os e-mails da universidade, mesmo que o aplicativo tenha sido criado inicialmente com um e-mail pessoal. Também simplifica o gerenciamento, pois o desenvolvedor não precisa adicionar individualmente cada usuário ao locatário. Esta abordagem aproveita a flexibilidade dos serviços de gestão de identidade do Azure para garantir uma acessibilidade mais ampla e uma integração perfeita em aplicações educacionais.

Perguntas comuns sobre a integração do Microsoft 365 em aplicativos Flask

  1. O que é a autenticação multilocatário do Azure AD?
  2. A autenticação multilocatário do Azure AD permite que os aplicativos atendam usuários de vários locatários do Azure AD, e não apenas daquele em que o aplicativo foi registrado.
  3. Como configuro meu aplicativo Flask para multilocatário do Azure?
  4. Você precisa modificar o registro do aplicativo no Azure para aceitar entradas de qualquer locatário do Azure AD, definindo o 'signInAudience' no manifesto.
  5. Quais são os benefícios de usar oauth.remote_app() no frasco?
  6. Esta função simplifica a conexão com provedores OAuth gerenciando o fluxo OAuth, incluindo recuperação e armazenamento de token.
  7. Por que um usuário pode receber um erro informando que sua conta não existe no locatário?
  8. Isso geralmente ocorre se o aplicativo não estiver configurado para acesso multilocatário ou se o usuário não estiver registrado como usuário externo no locatário.
  9. Como posso lidar com erros durante o processo de autenticação no Flask?
  10. Implementar tratamento de erros no authorized_response() função para capturar e responder a erros, como negações de acesso ou tokens ausentes.

Considerações finais sobre a integração de autenticação do Microsoft 365

Concluindo, a integração do login do Microsoft 365 em aplicativos Flask sem usar um email universitário envolve a configuração de um aplicativo Azure com credenciais pessoais e sua configuração para acesso multilocatário. Essa abordagem não apenas contorna as restrições que as universidades podem impor ao uso de e-mails oficiais para a criação de inscrições, mas também simplifica o processo de login para usuários de diferentes locatários. Seguindo as práticas recomendadas para OAuth e lidando com possíveis erros de maneira eficaz, os desenvolvedores podem fornecer uma experiência de usuário segura e contínua.