Integrați Microsoft 365 Login în Flask Web Apps

Integrați Microsoft 365 Login în Flask Web Apps
Integrați Microsoft 365 Login în Flask Web Apps

Configurarea autentificării Microsoft 365

Atunci când dezvoltați aplicații web în scopuri educaționale, integrarea resurselor instituționale, cum ar fi e-mailul Microsoft 365, poate îmbunătăți experiența utilizatorului și poate simplifica procesele de conectare. Această integrare este deosebit de utilă atunci când aplicațiile trebuie să se alinieze la politicile IT ale universității, ceea ce ar putea restricționa crearea de aplicații sub acreditările universitare.

În acest scenariu, utilizarea unui cont personal Microsoft Azure pentru a configura aplicația este o soluție practică. Cu toate acestea, pot apărea provocări, cum ar fi probleme legate de restricțiile chiriașilor atunci când încercați să vă conectați cu un e-mail al universității. Acest lucru necesită o strategie de gestionare a conturilor de utilizator pentru diferiți chiriași fără a compromite funcționalitatea sau securitatea aplicației.

Comanda Descriere
oauth.remote_app() Inițializează o nouă instanță de aplicație la distanță pentru OAuth; este folosit pentru a gestiona comunicarea cu furnizorii OAuth.
flask_oauthlib.client.OAuth O extensie Flask pentru integrarea furnizorilor de servicii OAuth, facilitând autentificarea prin protocoale OAuth.
authorized_response() Parte a Flask-OAuthlib, această metodă preia răspunsul OAuth autorizat din funcția de apel invers.
session['oauth_token'] Folosit pentru stocarea jetonului OAuth în sesiune pentru acces ulterior, critic pentru gestionarea sesiunilor utilizatorilor și a stării de autentificare.
microsoft.authorize() O metodă care redirecționează către adresa URL de autorizare a furnizorului OAuth, unde utilizatorul poate autoriza aplicația.
url_for() O funcție de ajutor în Flask care generează un punct final pentru o funcție de vizualizare dată. Este util pentru generarea de adrese URL pentru redirecționări.

Explicarea integrării Flask cu autentificarea Microsoft 365

Scripturile de front-end și back-end facilitează integrarea autentificarii Microsoft 365 într-o aplicație web Flask. Pe frontend, o pagină HTML simplă prezintă un buton care, atunci când este apăsat, declanșează o funcție JavaScript pentru a redirecționa utilizatorul către backend pentru autentificare. Acest proces începe cu loginWithMicrosoft() funcția, care modifică locația ferestrei la ruta backend gestionată de Flask. Scriptul backend folosește Flask și Flask-OAuthlib pentru a gestiona fluxul OAuth cu platforma de identitate Microsoft.

În backend, oauth.remote_app() comanda setează o conexiune cu punctele finale OAuth ale Microsoft utilizând acreditările aplicației. The microsoft.authorize() funcția inițiază procesul de autentificare prin redirecționarea utilizatorului către pagina de autorizare a Microsoft. După ce utilizatorul se conectează și acordă permisiunile necesare, furnizorul OAuth le trimite înapoi la aplicație folosind adresa URL de apel invers specificată în url_for('authorized'). The authorized_response() metoda procesează acest apel invers, regăsind jetonul de acces necesar pentru a confirma autentificarea și a menține sesiunea utilizatorului.

Interfață de autentificare Frontend Microsoft 365

HTML și JavaScript utilizate pentru 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>

Flux de autentificare backend cu Microsoft 365

Python și Flask utilizate pentru backend

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)

Configurare avansată pentru autentificarea Microsoft 365 în Flask

Pentru a aborda problema integrării conectării Microsoft 365 fără a utiliza un e-mail gestionat de universitate, este esențial să înțelegeți conceptul de aplicații multi-chiriași în Azure. O aplicație cu mai mulți chiriași permite utilizatorilor de la mai mulți chiriași Azure AD să acceseze aplicația, ceea ce este ideal pentru setările universitare în care studenții pot avea e-mailuri de domenii diferite. Această configurare necesită configurarea aplicației Azure pentru a accepta conectări de la orice chiriaș Azure AD, ceea ce se face prin setarea „signInAudience” din manifestul aplicației la „AzureADMultipleOrgs”.

Această modificare de configurare permite studenților să-și folosească e-mailurile universitare, chiar dacă aplicația a fost creată inițial cu un e-mail personal. De asemenea, simplifică gestionarea, deoarece dezvoltatorul nu trebuie să adauge individual fiecare utilizator la chiriaș. Această abordare valorifică flexibilitatea serviciilor de gestionare a identității Azure pentru a asigura o accesibilitate mai largă și o integrare perfectă în aplicațiile educaționale.

Întrebări frecvente despre integrarea Microsoft 365 în aplicațiile Flask

  1. Ce este autentificarea multi-locată Azure AD?
  2. Autentificarea multi-locată Azure AD permite aplicațiilor să deservească utilizatorii de la mai mulți chiriași Azure AD, nu doar cel în care a fost înregistrată aplicația.
  3. Cum îmi configurez aplicația Flask pentru multi-locatari Azure?
  4. Trebuie să modificați înregistrarea aplicației în Azure pentru a accepta conectări de la orice chiriaș Azure AD setând „signInAudience” în manifest.
  5. Care sunt beneficiile utilizării oauth.remote_app() în balon?
  6. Această funcție simplifică conectarea la furnizorii OAuth prin gestionarea fluxului OAuth, inclusiv recuperarea și stocarea token-ului.
  7. De ce ar putea un utilizator să primească o eroare care afirmă că contul său nu există în chiriaș?
  8. Acest lucru se întâmplă de obicei dacă aplicația nu este configurată pentru acces multi-locatari sau dacă utilizatorul nu este înregistrat ca utilizator extern în chiriaș.
  9. Cum pot gestiona erorile în timpul procesului de autentificare în Flask?
  10. Implementați gestionarea erorilor în authorized_response() funcția de a prinde și de a răspunde la erori, cum ar fi refuzurile de acces sau jetoanele lipsă.

Considerări finale despre integrarea autentificării Microsoft 365

În concluzie, integrarea autentificării Microsoft 365 în aplicațiile Flask fără a utiliza un e-mail universitar implică configurarea unei aplicații Azure cu acreditări personale și configurarea acesteia pentru acces multi-locatari. Această abordare nu numai că eludează restricțiile pe care universitățile le-ar putea impune cu privire la utilizarea e-mailurilor oficiale pentru crearea aplicațiilor, dar simplifică și procesul de conectare pentru utilizatori din diferiți chiriași. Urmând cele mai bune practici pentru OAuth și gestionând potențialele erori în mod eficient, dezvoltatorii pot oferi o experiență de utilizator fără întreruperi și sigură.