Интегрируйте вход в Microsoft 365 в веб-приложения Flask

Интегрируйте вход в Microsoft 365 в веб-приложения Flask
Интегрируйте вход в Microsoft 365 в веб-приложения Flask

Настройка аутентификации 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() Команда устанавливает соединение с конечными точками OAuth Microsoft, используя учетные данные приложения. microsoft.authorize() Функция инициирует процесс аутентификации, перенаправляя пользователя на страницу авторизации Microsoft. После того как пользователь входит в систему и предоставляет необходимые разрешения, поставщик OAuth отправляет их обратно в приложение, используя URL-адрес обратного вызова, указанный в параметре url_for('authorized'). 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() во Флаке?
  6. Эта функция упрощает подключение к поставщикам OAuth за счет управления потоком OAuth, включая извлечение и хранение токенов.
  7. Почему пользователь может получить сообщение об ошибке, сообщающее, что его учетная запись не существует в клиенте?
  8. Обычно это происходит, если приложение не настроено для мультитенантного доступа или если пользователь не зарегистрирован в клиенте как внешний пользователь.
  9. Как я могу обрабатывать ошибки во время процесса аутентификации в Flask?
  10. Реализовать обработку ошибок в authorized_response() функция для обнаружения и реагирования на такие ошибки, как отказ в доступе или отсутствие токенов.

Заключительные мысли об интеграции проверки подлинности Microsoft 365

В заключение, интеграция входа в Microsoft 365 в приложения Flask без использования университетской электронной почты предполагает настройку приложения Azure с личными учетными данными и настройку его для мультитенантного доступа. Этот подход не только обходит ограничения, которые университеты могут налагать на использование официальных адресов электронной почты для создания приложений, но также упрощает процесс входа в систему для пользователей разных клиентов. Следуя передовым практикам OAuth и эффективно обрабатывая потенциальные ошибки, разработчики могут обеспечить бесперебойную и безопасную работу пользователей.