Integrer Microsoft 365 Login i Flask Web Apps

Integrer Microsoft 365 Login i Flask Web Apps
Integrer Microsoft 365 Login i Flask Web Apps

Opsætning af Microsoft 365-godkendelse

Ved udvikling af webapplikationer til uddannelsesformål kan integration af institutionelle ressourcer såsom Microsoft 365-e-mail forbedre brugeroplevelsen og strømline login-processer. Denne integration er især nyttig, når applikationer skal tilpasses universitetets it-politikker, hvilket kan begrænse oprettelsen af ​​applikationer under universitetslegitimationsoplysninger.

I dette scenarie er det en praktisk løsning at bruge en personlig Microsoft Azure-konto til at konfigurere applikationen. Der kan dog opstå udfordringer, såsom problemer med lejerbegrænsninger, når du forsøger at logge på med en universitets-e-mail. Dette nødvendiggør en strategi til at administrere brugerkonti på tværs af forskellige lejere uden at kompromittere appens funktionalitet eller sikkerhed.

Kommando Beskrivelse
oauth.remote_app() Initialiserer en ny fjernapplikationsforekomst til OAuth; det bruges til at håndtere kommunikation med OAuth-udbydere.
flask_oauthlib.client.OAuth En Flask-udvidelse til integration af OAuth-tjenesteudbydere, hvilket gør det nemmere at godkende via OAuth-protokoller.
authorized_response() Denne metode er en del af Flask-OAuthlib og henter det autoriserede OAuth-svar fra tilbagekaldsfunktionen.
session['oauth_token'] Bruges til at gemme OAuth-tokenet i sessionen til senere adgang, afgørende for styring af brugersessioner og godkendelsestilstand.
microsoft.authorize() En metode, der omdirigerer til OAuth-udbyderens autorisations-URL, hvor brugeren kan godkende appen.
url_for() En hjælpefunktion i Flask, der genererer et slutpunkt for en given visningsfunktion. Det er nyttigt til at generere URL'er til omdirigeringer.

Forklaring af kolbeintegrationen med Microsoft 365-godkendelse

Frontend- og backend-scripts letter sammen integrationen af ​​Microsoft 365-login i en Flask-webapplikation. På frontenden præsenterer en simpel HTML-side en knap, der, når der klikkes på den, udløser en JavaScript-funktion til at omdirigere brugeren til backend for godkendelse. Denne proces starter med loginWithMicrosoft() funktion, som ændrer vinduesplaceringen til backend-ruten, der håndteres af Flask. Backend-scriptet bruger Flask og Flask-OAuthlib at styre OAuth-flowet med Microsofts identitetsplatform.

I bagenden er oauth.remote_app() kommandoen opretter en forbindelse til Microsofts OAuth-slutpunkter ved hjælp af applikationslegitimationsoplysninger. Det microsoft.authorize() funktionen starter godkendelsesprocessen ved at omdirigere brugeren til Microsofts autorisationsside. Når brugeren har logget på og givet de nødvendige tilladelser, sender OAuth-udbyderen dem tilbage til applikationen ved hjælp af den tilbagekalds-URL, der er angivet i url_for('authorized'). Det authorized_response() metoden behandler dette tilbagekald og henter det adgangstoken, der er nødvendigt for at bekræfte godkendelse og vedligeholde brugerens session.

Frontend Microsoft 365 Authentication Interface

HTML og JavaScript bruges til 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>

Backend Authentication Flow med Microsoft 365

Python og Flask bruges til 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)

Avanceret opsætning til Microsoft 365 Authentication in Flask

For at løse problemet med at integrere Microsoft 365-login uden at bruge en universitetsadministreret e-mail, er det vigtigt at forstå konceptet med multi-tenant-applikationer i Azure. En multi-tenant-applikation giver brugere fra flere Azure AD-lejere adgang til appen, som er ideel til universitetsindstillinger, hvor studerende kan have forskellige domæne-e-mails. Denne opsætning kræver konfiguration af Azure-applikationen til at acceptere logins fra enhver Azure AD-lejer, hvilket gøres ved at indstille 'signInAudience' i applikationsmanifestet til 'AzureADMultipleOrgs'.

Denne konfigurationsændring giver studerende mulighed for at bruge deres universitets-e-mails, selvom applikationen oprindeligt blev oprettet med en personlig e-mail. Det forenkler også administrationen, da udvikleren ikke behøver at tilføje hver bruger individuelt til lejeren. Denne tilgang udnytter fleksibiliteten i Azures identitetsadministrationstjenester for at sikre bredere tilgængelighed og problemfri integration i uddannelsesapplikationer.

Almindelige spørgsmål om Microsoft 365-integration i Flask-apps

  1. Hvad er Azure AD multi-tenant-godkendelse?
  2. Azure AD multi-tenant-godkendelse giver applikationer mulighed for at betjene brugere fra flere Azure AD-lejere, ikke kun den, hvor applikationen blev registreret.
  3. Hvordan konfigurerer jeg min Flask-app til Azure multi-tenant?
  4. Du skal ændre applikationsregistreringen i Azure for at acceptere logins fra enhver Azure AD-lejer ved at indstille 'signInAudience' i manifestet.
  5. Hvad er fordelene ved at bruge oauth.remote_app() i Flaske?
  6. Denne funktion forenkler tilslutning til OAuth-udbydere ved at administrere OAuth-flowet, inklusive token-hentning og -lagring.
  7. Hvorfor får en bruger muligvis en fejlmeddelelse om, at deres konto ikke findes i lejeren?
  8. Dette sker normalt, hvis applikationen ikke er sat op til multi-tenant-adgang, eller hvis brugeren ikke er registreret som ekstern bruger i lejeren.
  9. Hvordan kan jeg håndtere fejl under godkendelsesprocessen i Flask?
  10. Implementer fejlhåndtering i authorized_response() funktion til at fange og reagere på fejl såsom adgangsnægtelser eller manglende tokens.

Sidste tanker om Microsoft 365 Authentication Integration

Som konklusion involverer integration af Microsoft 365-login i Flask-applikationer uden brug af en universitets-e-mail opsætning af en Azure-applikation med personlige legitimationsoplysninger og konfiguration af den til adgang til flere lejere. Denne tilgang omgår ikke kun de begrænsninger, som universiteter kan pålægge at bruge officielle e-mails til oprettelse af ansøgninger, men forenkler også login-processen for brugere på tværs af forskellige lejere. Ved at følge bedste praksis for OAuth og håndtere potentielle fejl effektivt, kan udviklere give en problemfri og sikker brugeroplevelse.