Microsoft 365 ログインを Flask Web Apps に統合する

Python Flask OAuth

Microsoft 365 認証のセットアップ

教育目的で Web アプリケーションを開発する場合、Microsoft 365 電子メールなどの組織リソースを統合すると、ユーザー エクスペリエンスが向上し、ログイン プロセスが合理化されます。この統合は、大学の資格情報に基づくアプリケーションの作成が制限される可能性がある大学の IT ポリシーにアプリケーションを合わせる必要がある場合に特に役立ちます。

このシナリオでは、個人用 Microsoft Azure アカウントを使用してアプリケーションをセットアップすることが現実的な解決策です。ただし、大学の電子メールを使用してログインしようとすると、テナント制限の問題などの課題が発生する可能性があります。そのため、アプリの機能やセキュリティを損なうことなく、さまざまなテナントにまたがるユーザー アカウントを管理する戦略が必要になります。

指示 説明
oauth.remote_app() OAuth 用に新しいリモート アプリケーション インスタンスを初期化します。 OAuth プロバイダーとの通信を処理するために使用されます。
flask_oauthlib.client.OAuth OAuth サービス プロバイダーを統合するための Flask 拡張機能。OAuth プロトコル経由の認証を容易にします。
authorized_response() Flask-OAuthlib の一部であるこのメソッドは、コールバック関数から承認された OAuth 応答を取得します。
session['oauth_token'] 後のアクセスのためにセッションに OAuth トークンを保存するために使用され、ユーザー セッションと認証状態を管理するために重要です。
microsoft.authorize() ユーザーがアプリを認証できる OAuth プロバイダーの認証 URL にリダイレクトするメソッド。
url_for() 指定されたビュー関数のエンドポイントを生成する Flask のヘルパー関数。リダイレクト用の URL を生成する場合に便利です。

Flask と Microsoft 365 認証の統合の説明

フロントエンド スクリプトとバックエンド スクリプトを組み合わせることで、Microsoft 365 ログインの Flask Web アプリケーションへの統合が容易になります。フロントエンドでは、単純な HTML ページにボタンが表示され、クリックすると JavaScript 関数がトリガーされ、認証のためにユーザーをバックエンドにリダイレクトします。このプロセスは次から始まります。 この関数は、ウィンドウの位置を Flask によって処理されるバックエンド ルートに変更します。バックエンドスクリプトが使用するのは、 そして Microsoft の ID プラットフォームを使用して OAuth フローを管理します。

バックエンドでは、 このコマンドは、アプリケーション資格情報を使用して Microsoft の OAuth エンドポイントとの接続を設定します。の この機能は、ユーザーを 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)

Flask での Microsoft 365 認証の高度なセットアップ

大学が管理する電子メールを使用せずに Microsoft 365 ログインを統合するという問題に対処するには、Azure のマルチテナント アプリケーションの概念を理解することが不可欠です。マルチテナント アプリケーションを使用すると、複数の Azure AD テナントのユーザーがアプリにアクセスできるようになります。これは、学生が異なるドメインの電子メールを使用する可能性がある大学の設定に最適です。このセットアップでは、任意の Azure AD テナントからのサインインを受け入れるように Azure アプリケーションを構成する必要があります。これを行うには、アプリケーション マニフェストの 'signInAudience' を 'AzureADMultipleOrgs' に設定します。

この構成変更により、アプリケーションが最初に個人の電子メールで作成された場合でも、学生は大学の電子メールを使用できるようになります。また、開発者が各ユーザーをテナントに個別に追加する必要がないため、管理も簡素化されます。このアプローチでは、Azure の ID 管理サービスの柔軟性を活用して、教育アプリケーションでのより広範なアクセシビリティとシームレスな統合を保証します。

  1. Azure AD マルチテナント認証とは何ですか?
  2. Azure AD マルチテナント認証を使用すると、アプリケーションは、アプリケーションが登録されたテナントだけでなく、複数の Azure AD テナントのユーザーにサービスを提供できます。
  3. Azure マルチテナント用に Flask アプリを構成するにはどうすればよいですか?
  4. マニフェストで 'signInAudience' を設定して、Azure AD テナントからのサインインを受け入れるように、Azure でのアプリケーション登録を変更する必要があります。
  5. 使用するメリットは何ですか フラスコで?
  6. この機能は、トークンの取得や保管などの OAuth フローを管理することにより、OAuth プロバイダーへの接続を簡素化します。
  7. ユーザーに自分のアカウントがテナントに存在しないというエラーが表示されるのはなぜですか?
  8. これは通常、アプリケーションがマルチテナント アクセス用に設定されていない場合、またはユーザーがテナントに外部ユーザーとして登録されていない場合に発生します。
  9. Flask での認証プロセス中のエラーを処理するにはどうすればよいですか?
  10. でエラー処理を実装します。 アクセス拒否やトークンの欠落などのエラーをキャッチして対応する機能。

結論として、大学の電子メールを使用せずに Microsoft 365 ログインを Flask アプリケーションに統合するには、個人の資格情報を使用して Azure アプリケーションをセットアップし、マルチテナント アクセス用に構成する必要があります。このアプローチは、アプリケーション作成での公式電子メールの使用に対して大学が課す可能性のある制限を回避するだけでなく、さまざまなテナントにわたるユーザーのログイン プロセスを簡素化します。 OAuth のベスト プラクティスに従い、潜在的なエラーを効果的に処理することで、開発者はシームレスで安全なユーザー エクスペリエンスを提供できます。