Integrasikan Login Microsoft 365 di Aplikasi Web Flask

Integrasikan Login Microsoft 365 di Aplikasi Web Flask
Integrasikan Login Microsoft 365 di Aplikasi Web Flask

Menyiapkan Otentikasi Microsoft 365

Saat mengembangkan aplikasi web untuk tujuan pendidikan, mengintegrasikan sumber daya institusi seperti email Microsoft 365 dapat meningkatkan pengalaman pengguna dan menyederhanakan proses login. Integrasi ini sangat berguna ketika aplikasi harus selaras dengan kebijakan TI universitas, yang mungkin membatasi pembuatan aplikasi berdasarkan kredensial universitas.

Dalam skenario ini, menggunakan akun Microsoft Azure pribadi untuk menyiapkan aplikasi adalah solusi praktis. Namun, tantangan dapat muncul, seperti masalah pembatasan penyewa saat mencoba masuk dengan email universitas. Hal ini memerlukan strategi untuk mengelola akun pengguna di berbagai penyewa tanpa mengorbankan fungsionalitas atau keamanan aplikasi.

Memerintah Keterangan
oauth.remote_app() Menginisialisasi contoh aplikasi jarak jauh baru untuk OAuth; ini digunakan untuk menangani komunikasi dengan penyedia OAuth.
flask_oauthlib.client.OAuth Ekstensi Flask untuk mengintegrasikan penyedia layanan OAuth, sehingga memudahkan autentikasi melalui protokol OAuth.
authorized_response() Bagian dari Flask-OAuthlib, metode ini mengambil respons OAuth resmi dari fungsi panggilan balik.
session['oauth_token'] Digunakan untuk menyimpan token OAuth dalam sesi untuk akses selanjutnya, penting untuk mengelola sesi pengguna dan status autentikasi.
microsoft.authorize() Metode yang mengalihkan ke URL otorisasi penyedia OAuth tempat pengguna dapat mengotorisasi aplikasi.
url_for() Fungsi pembantu di Flask yang menghasilkan titik akhir untuk fungsi tampilan tertentu. Ini berguna untuk menghasilkan URL untuk pengalihan.

Menjelaskan Integrasi Flask dengan Otentikasi Microsoft 365

Skrip frontend dan backend bersama-sama memfasilitasi integrasi login Microsoft 365 ke dalam aplikasi web Flask. Di frontend, halaman HTML sederhana menampilkan tombol yang, ketika diklik, memicu fungsi JavaScript untuk mengarahkan pengguna ke backend untuk otentikasi. Proses ini dimulai dengan loginWithMicrosoft() fungsi, yang mengubah lokasi jendela ke rute backend yang ditangani oleh Flask. Skrip backend menggunakan Flask Dan Flask-OAuthlib untuk mengelola aliran OAuth dengan platform identitas Microsoft.

Di bagian belakang, oauth.remote_app() perintah menyiapkan koneksi dengan titik akhir OAuth Microsoft menggunakan kredensial aplikasi. Itu microsoft.authorize() fungsi memulai proses otentikasi dengan mengarahkan pengguna ke halaman otorisasi Microsoft. Setelah pengguna masuk dan memberikan izin yang diperlukan, penyedia OAuth mengirim mereka kembali ke aplikasi menggunakan URL panggilan balik yang ditentukan di url_for('authorized'). Itu authorized_response() metode memproses panggilan balik ini, mengambil token akses yang diperlukan untuk mengonfirmasi otentikasi dan mempertahankan sesi pengguna.

Antarmuka Otentikasi Microsoft 365 Frontend

HTML dan JavaScript digunakan untuk 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>

Alur Otentikasi Backend dengan Microsoft 365

Python dan Flask digunakan untuk 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)

Pengaturan Tingkat Lanjut untuk Otentikasi Microsoft 365 di Flask

Untuk mengatasi masalah pengintegrasian login Microsoft 365 tanpa menggunakan email yang dikelola universitas, penting untuk memahami konsep aplikasi multi-penyewa di Azure. Aplikasi multi-penyewa memungkinkan pengguna dari beberapa penyewa Azure AD untuk mengakses aplikasi, yang ideal untuk pengaturan universitas di mana mahasiswa mungkin memiliki email domain berbeda. Penyiapan ini memerlukan konfigurasi aplikasi Azure untuk menerima proses masuk dari penyewa Azure Active Directory mana pun, yang dilakukan dengan mengatur 'signInAudience' dalam manifes aplikasi ke 'AzureADMultipleOrgs'.

Perubahan konfigurasi ini memungkinkan mahasiswa untuk menggunakan email universitas mereka, meskipun aplikasi awalnya dibuat dengan email pribadi. Ini juga menyederhanakan pengelolaan karena pengembang tidak perlu menambahkan setiap pengguna ke penyewa satu per satu. Pendekatan ini memanfaatkan fleksibilitas layanan manajemen identitas Azure untuk memastikan aksesibilitas yang lebih luas dan integrasi yang lancar dalam aplikasi pendidikan.

Pertanyaan Umum Tentang Integrasi Microsoft 365 di Aplikasi Flask

  1. Apa yang dimaksud dengan autentikasi multi-penyewa Azure Active Directory?
  2. Autentikasi multi-penyewa Azure Active Directory memungkinkan aplikasi melayani pengguna dari beberapa penyewa Azure Active Directory, bukan hanya penyewa tempat aplikasi didaftarkan.
  3. Bagaimana cara mengonfigurasi aplikasi Flask saya untuk multi-penyewa Azure?
  4. Anda perlu mengubah pendaftaran aplikasi di Azure untuk menerima proses masuk dari penyewa Azure Active Directory mana pun dengan mengatur 'signInAudience' di manifes.
  5. Apa manfaat menggunakan oauth.remote_app() di Labu?
  6. Fungsi ini menyederhanakan koneksi ke penyedia OAuth dengan mengelola aliran OAuth, termasuk pengambilan dan penyimpanan token.
  7. Mengapa pengguna mungkin mendapatkan pesan kesalahan yang menyatakan akun mereka tidak ada di penyewa?
  8. Hal ini biasanya terjadi jika aplikasi tidak diatur untuk akses multi-penyewa atau jika pengguna tidak terdaftar sebagai pengguna eksternal di penyewa.
  9. Bagaimana cara menangani kesalahan selama proses otentikasi di Flask?
  10. Menerapkan penanganan kesalahan di authorized_response() berfungsi untuk menangkap dan merespons kesalahan seperti penolakan akses atau token yang hilang.

Pemikiran Akhir tentang Integrasi Otentikasi Microsoft 365

Kesimpulannya, mengintegrasikan login Microsoft 365 ke dalam aplikasi Flask tanpa menggunakan email universitas melibatkan penyiapan aplikasi Azure dengan kredensial pribadi dan mengonfigurasinya untuk akses multi-penyewa. Pendekatan ini tidak hanya menghindari pembatasan yang mungkin diterapkan universitas dalam penggunaan email resmi untuk pembuatan aplikasi, tetapi juga menyederhanakan proses login untuk pengguna di berbagai penyewa. Dengan mengikuti praktik terbaik untuk OAuth dan menangani potensi kesalahan secara efektif, pengembang dapat memberikan pengalaman pengguna yang lancar dan aman.