Інтегруйте Microsoft 365 Login у Flask Web Apps

Інтегруйте Microsoft 365 Login у Flask Web Apps
Інтегруйте Microsoft 365 Login у Flask Web Apps

Налаштування автентифікації Microsoft 365

Під час розробки веб-додатків для освітніх цілей інтеграція інституційних ресурсів, таких як електронна пошта Microsoft 365, може покращити взаємодію з користувачем і спростити процеси входу. Ця інтеграція особливо корисна, коли програми повинні узгоджуватися з ІТ-політикою університету, яка може обмежувати створення програм під обліковими даними університету.

У цьому випадку використання особистого облікового запису Microsoft Azure для налаштування програми є практичним рішенням. Однак можуть виникнути проблеми, наприклад проблеми з обмеженнями для орендарів під час спроби входу за допомогою університетської електронної адреси. Для цього необхідна стратегія керування обліковими записами користувачів у різних клієнтах без шкоди для функціональності чи безпеки програми.

Команда опис
oauth.remote_app() Ініціалізує новий екземпляр віддаленої програми для OAuth; він використовується для обробки зв’язку з постачальниками OAuth.
flask_oauthlib.client.OAuth Розширення Flask для інтеграції постачальників послуг OAuth, що полегшує автентифікацію за допомогою протоколів OAuth.
authorized_response() Частина Flask-OAuthlib, цей метод отримує авторизовану відповідь OAuth із функції зворотного виклику.
session['oauth_token'] Використовується для зберігання маркера OAuth у сеансі для подальшого доступу, критичного для керування сеансами користувача та станом автентифікації.
microsoft.authorize() Метод, який переспрямовує на URL-адресу авторизації постачальника OAuth, де користувач може авторизувати програму.
url_for() Допоміжна функція у Flask, яка генерує кінцеву точку для заданої функції перегляду. Це корисно для створення URL-адрес для перенаправлення.

Пояснення інтеграції Flask із автентифікацією Microsoft 365

Інтерфейсний і внутрішній сценарії разом полегшують інтеграцію входу в Microsoft 365 у веб-програму Flask. На інтерфейсі проста HTML-сторінка представляє кнопку, натиснувши яку, запускає функцію JavaScript для перенаправлення користувача на серверну частину для автентифікації. Цей процес починається з loginWithMicrosoft() функція, яка змінює розташування вікна на серверний маршрут, який обробляється Flask. Скрипт серверної частини використовує Flask і Flask-OAuthlib для керування потоком OAuth за допомогою платформи ідентифікації Microsoft.

У серверній частині, oauth.remote_app() Команда встановлює з’єднання з кінцевими точками Microsoft OAuth за допомогою облікових даних програми. The microsoft.authorize() функція ініціює процес автентифікації, перенаправляючи користувача на сторінку авторизації Microsoft. Після входу користувача та надання необхідних дозволів постачальник OAuth надсилає його назад до програми за допомогою URL-адреси зворотного виклику, указаної в url_for('authorized'). The authorized_response() метод обробляє цей зворотній виклик, отримуючи маркер доступу, необхідний для підтвердження автентифікації та підтримки сеансу користувача.

Передній інтерфейс автентифікації Microsoft 365

HTML і JavaScript використовуються для інтерфейсу

<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>

Потік серверної автентифікації з Microsoft 365

Python і Flask використовуються для серверної частини

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)

Розширене налаштування автентифікації Microsoft 365 у Flask

Щоб вирішити проблему інтеграції входу в Microsoft 365 без використання електронної пошти, керованої університетом, важливо розуміти концепцію мультитенантних програм в Azure. Програма з декількома клієнтами дозволяє користувачам із кількох клієнтів Azure AD отримувати доступ до програми, що ідеально підходить для університетських налаштувань, де студенти можуть мати різні доменні електронні адреси. Для цього налаштування потрібно налаштувати програму Azure на прийом входів від будь-якого клієнта Azure AD. Для цього в маніфесті програми для параметра «signInAudience» установіть значення «AzureADMultipleOrgs».

Ця зміна конфігурації дозволяє студентам використовувати свою університетську електронну пошту, навіть якщо програма спочатку була створена з особистою електронною поштою. Це також спрощує керування, оскільки розробнику не потрібно окремо додавати кожного користувача до клієнта. Цей підхід використовує гнучкість служб керування ідентифікацією Azure для забезпечення ширшої доступності та повної інтеграції в освітні програми.

Поширені запитання про інтеграцію Microsoft 365 у програми Flask

  1. Що таке мультитенантна автентифікація Azure AD?
  2. Автентифікація кількох клієнтів Azure AD дозволяє додаткам обслуговувати користувачів із кількох клієнтів Azure AD, а не лише з того, де зареєстровано програму.
  3. Як налаштувати програму Flask для багатокористувацького використання Azure?
  4. Вам потрібно змінити реєстрацію програми в Azure, щоб приймати входи від будь-якого клієнта Azure AD, установивши «signInAudience» у маніфесті.
  5. Які переваги використання oauth.remote_app() у Flask?
  6. Ця функція спрощує підключення до постачальників OAuth, керуючи потоком OAuth, включаючи отримання та зберігання маркерів.
  7. Чому користувач може отримати повідомлення про те, що його обліковий запис не існує в клієнті?
  8. Зазвичай це відбувається, якщо програму не налаштовано для доступу з кількома клієнтами або якщо користувач не зареєстрований як зовнішній користувач у клієнті.
  9. Як я можу обробляти помилки під час процесу автентифікації у Flask?
  10. Запровадити обробку помилок у authorized_response() функція виявлення та реагування на помилки, такі як відмови в доступі або відсутність токенів.

Останні думки щодо інтеграції автентифікації Microsoft 365

Підсумовуючи, інтеграція входу Microsoft 365 у програми Flask без використання університетської електронної пошти передбачає налаштування програми Azure з особистими обліковими даними та її конфігурацію для доступу з кількома клієнтами. Цей підхід не тільки обходить обмеження, які університети можуть накласти на використання офіційної електронної пошти для створення заявок, але й спрощує процес входу для користувачів із різних орендарів. Дотримуючись найкращих практик щодо OAuth і ефективно вирішуючи потенційні помилки, розробники можуть забезпечити безперебійну та безпечну роботу користувача.