Konfigurera Microsoft 365-autentisering
När man utvecklar webbapplikationer för utbildningsändamål kan integration av institutionella resurser som Microsoft 365-e-post förbättra användarupplevelsen och effektivisera inloggningsprocesserna. Denna integrering är särskilt användbar när applikationer måste anpassas till universitetets IT-policyer, vilket kan begränsa skapandet av applikationer med universitetsuppgifter.
I det här scenariot är det en praktisk lösning att använda ett personligt Microsoft Azure-konto för att konfigurera programmet. Däremot kan utmaningar uppstå, till exempel problem med hyresgästbegränsningar vid försök att logga in med en e-post från universitetet. Detta kräver en strategi för att hantera användarkonton mellan olika hyresgäster utan att kompromissa med appens funktionalitet eller säkerhet.
Kommando | Beskrivning |
---|---|
oauth.remote_app() | Initierar en ny fjärrapplikationsinstans för OAuth; den används för att hantera kommunikation med OAuth-leverantörer. |
flask_oauthlib.client.OAuth | En Flask-tillägg för att integrera OAuth-tjänsteleverantörer, vilket gör det lättare att autentisera via OAuth-protokoll. |
authorized_response() | En del av Flask-OAuthlib, den här metoden hämtar det auktoriserade OAuth-svaret från återuppringningsfunktionen. |
session['oauth_token'] | Används för att lagra OAuth-token i sessionen för senare åtkomst, avgörande för hantering av användarsessioner och autentiseringstillstånd. |
microsoft.authorize() | En metod som omdirigerar till OAuth-leverantörens auktoriserings-URL där användaren kan auktorisera appen. |
url_for() | En hjälpfunktion i Flask som genererar en slutpunkt för en given vyfunktion. Det är användbart för att generera webbadresser för omdirigeringar. |
Förklara kolvintegreringen med Microsoft 365-autentisering
Frontend- och backend-skripten tillsammans underlättar integrationen av Microsoft 365-inloggning i en Flask-webbapplikation. På frontend, en enkel HTML-sida presenterar en knapp som, när den klickas, utlöser en JavaScript-funktion för att omdirigera användaren till backend för autentisering. Denna process börjar med loginWithMicrosoft() funktion, som ändrar fönstrets placering till backend-rutten som hanteras av Flask. Backend-skriptet använder Flask och Flask-OAuthlib att hantera OAuth-flödet med Microsofts identitetsplattform.
I backend, den oauth.remote_app() kommandot ställer in en anslutning till Microsofts OAuth-slutpunkter med hjälp av applikationsreferenser. De microsoft.authorize() funktionen initierar autentiseringsprocessen genom att omdirigera användaren till Microsofts auktoriseringssida. Efter att användaren har loggat in och beviljat nödvändiga behörigheter skickar OAuth-leverantören tillbaka dem till applikationen med hjälp av den återuppringnings-URL som anges i url_for('authorized'). De authorized_response() metod bearbetar denna återuppringning och hämtar åtkomsttoken som behövs för att bekräfta autentisering och underhålla användarens session.
Frontend Microsoft 365 Authentication Interface
HTML och JavaScript används för 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-autentiseringsflöde med Microsoft 365
Python och Flask används för 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)
Avancerad installation för Microsoft 365-autentisering i kolv
För att lösa problemet med att integrera Microsoft 365-inloggning utan att använda en universitetshanterad e-post, är det viktigt att förstå konceptet med multi-tenant-applikationer i Azure. En multi-tenant-applikation tillåter användare från flera Azure AD-hyresgäster att komma åt appen, som är idealisk för universitetsinställningar där studenter kan ha olika domän-e-post. Den här installationen kräver att Azure-applikationen konfigureras för att acceptera inloggningar från alla Azure AD-klienter, vilket görs genom att ställa in 'signInAudience' i applikationsmanifestet till 'AzureADMultipleOrgs'.
Denna konfigurationsändring tillåter studenter att använda sina universitets e-postmeddelanden, även om applikationen ursprungligen skapades med en personlig e-post. Det förenklar också hanteringen eftersom utvecklaren inte behöver lägga till varje användare individuellt till hyresgästen. Detta tillvägagångssätt utnyttjar flexibiliteten hos Azures identitetshanteringstjänster för att säkerställa bredare tillgänglighet och sömlös integration i utbildningsapplikationer.
Vanliga frågor om Microsoft 365-integrering i Flask-appar
- Vad är Azure AD multi-tenant-autentisering?
- Azure AD multi-tenant-autentisering gör att applikationer kan betjäna användare från flera Azure AD-hyresgäster, inte bara den där applikationen registrerades.
- Hur konfigurerar jag min Flask-app för Azure multi-tenant?
- Du måste ändra applikationsregistreringen i Azure för att acceptera inloggningar från vilken Azure AD-klient som helst genom att ställa in "signInAudience" i manifestet.
- Vilka är fördelarna med att använda oauth.remote_app() i Flask?
- Den här funktionen förenklar anslutningen till OAuth-leverantörer genom att hantera OAuth-flödet, inklusive tokenhämtning och lagring.
- Varför kan en användare få ett felmeddelande om att deras konto inte finns i hyresgästen?
- Detta inträffar vanligtvis om applikationen inte är inställd för åtkomst till flera hyresgäster eller om användaren inte är registrerad som en extern användare i hyresgästen.
- Hur kan jag hantera fel under autentiseringsprocessen i Flask?
- Implementera felhantering i authorized_response() funktion för att fånga upp och svara på fel som till exempel åtkomstförnekelser eller saknade tokens.
Sista tankar om Microsoft 365 Authentication Integration
Sammanfattningsvis innebär att integrera Microsoft 365-inloggning i Flask-applikationer utan att använda en e-post från universitetet att konfigurera en Azure-applikation med personliga referenser och konfigurera den för åtkomst till flera klienter. Detta tillvägagångssätt kringgår inte bara de begränsningar som universiteten kan införa för att använda officiella e-postmeddelanden för att skapa applikationer utan förenklar också inloggningsprocessen för användare mellan olika hyresgäster. Genom att följa bästa praxis för OAuth och hantera potentiella fel effektivt kan utvecklare ge en sömlös och säker användarupplevelse.