Настройка аутентификации 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, перенаправляющая пользователя на серверную часть для аутентификации. Этот процесс начинается с функция, которая изменяет расположение окна на внутренний маршрут, обрабатываемый Flask. Бэкэнд-скрипт использует и для управления потоком OAuth с помощью платформы идентификации Microsoft.
В бэкэнде Команда устанавливает соединение с конечными точками OAuth Microsoft, используя учетные данные приложения. Функция инициирует процесс аутентификации, перенаправляя пользователя на страницу авторизации Microsoft. После того как пользователь входит в систему и предоставляет необходимые разрешения, поставщик OAuth отправляет их обратно в приложение, используя URL-адрес обратного вызова, указанный в параметре . 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 для обеспечения более широкой доступности и плавной интеграции с образовательными приложениями.
- Что такое многотенантная аутентификация Azure AD?
- Многотенантная проверка подлинности Azure AD позволяет приложениям обслуживать пользователей из нескольких клиентов Azure AD, а не только из того, в котором приложение было зарегистрировано.
- Как настроить приложение Flask для мультитенанта Azure?
- Вам необходимо изменить регистрацию приложения в Azure, чтобы принимать входы от любого клиента Azure AD, установив SignInAudience в манифесте.
- Каковы преимущества использования во Флаке?
- Эта функция упрощает подключение к поставщикам OAuth за счет управления потоком OAuth, включая извлечение и хранение токенов.
- Почему пользователь может получить сообщение об ошибке, сообщающее, что его учетная запись не существует в клиенте?
- Обычно это происходит, если приложение не настроено для мультитенантного доступа или если пользователь не зарегистрирован в клиенте как внешний пользователь.
- Как я могу обрабатывать ошибки во время процесса аутентификации в Flask?
- Реализовать обработку ошибок в функция для обнаружения и реагирования на такие ошибки, как отказ в доступе или отсутствие токенов.
В заключение, интеграция входа в Microsoft 365 в приложения Flask без использования университетской электронной почты предполагает настройку приложения Azure с личными учетными данными и настройку его для мультитенантного доступа. Этот подход не только обходит ограничения, которые университеты могут налагать на использование официальных адресов электронной почты для создания приложений, но также упрощает процесс входа в систему для пользователей разных клиентов. Следуя передовым практикам OAuth и эффективно обрабатывая потенциальные ошибки, разработчики могут обеспечить бесперебойную и безопасную работу пользователей.