適用於:具有白色複選標記符號的 Workforce 租用者
外部租用者(深入瞭解)
在本教學課程中,您會從 Python Flask Web 應用程式呼叫 Microsoft Graph API。 在 先前的教學課程中,您已將登入和註銷體驗新增至應用程式。 使用者登入之後,應用程式會取得存取令牌,以呼叫 Microsoft Graph API。
在本教學課程中,您會:
- 更新現有的 Python Flask Web 應用程式以取得存取令牌
- 使用存取令牌來呼叫 Microsoft Graph API。
先決條件
完成 教學課程:使用 Microsoft 身分識別平臺將登入新增至 Python Flask Web 應用程式的步驟。
定義範圍和 API 端點
在此範例中,我們會呼叫 Microsoft Graph API,以取得登入使用者的配置文件資訊。 如果您的應用程式位於員工租戶中,於登入時,使用者會同意應用程式存取 Microsoft Graph API 所需的範圍。 如果您的應用程式位於外部租使用者中,請確定您 代表租使用者中的使用者授與系統管理員同意,。 然後,應用程式會使用存取令牌來呼叫 API 並顯示結果。
在您的 .env 檔案中,新增我們要呼叫的端點,以及呼叫 Microsoft Graph API 所需的範圍:
SCOPE=User.Read
ENDPOINT=https://graph.microsoft.com/v1.0/me
更新 app_config.py 檔案,以檢視應用程式中的新配置。
# other configs go here
SCOPE = os.getenv("SCOPE")
ENDPOINT = os.getenv("ENDPOINT")
呼叫受保護的 API
將 API 端點傳遞至首頁。 這可讓您呼叫端點。 更新
/
路由,看起來如下列代碼段所示:@app.route("/") @auth.login_required def index(*, context): return render_template( 'index.html', user=context['user'], title="Flask Web App Sample", api_endpoint=os.getenv("ENDPOINT") # added this line )
呼叫受保護的Microsoft圖形 API,如下列代碼段所示。 我們會傳遞應用程式需要使用的範圍清單。 如果範圍存在,內容會包含存取令牌。 存取令牌是用來呼叫下游 API。 將此程式代碼新增至 app.py 檔案:
@app.route("/call_api") @auth.login_required(scopes=os.getenv("SCOPE", "").split()) def call_downstream_api(*, context): api_result = requests.get( # Use access token to call a web api os.getenv("ENDPOINT"), headers={'Authorization': 'Bearer ' + context['access_token']}, timeout=30, ).json() if context.get('access_token') else "Did you forget to set the SCOPE environment variable?" return render_template('display.html', title="API Response", result=api_result)
如果應用程式成功取得存取令牌,它會使用
requests.get(...)
方法對下游 API 提出 HTTP 要求。 在要求中,我們的下游 API URL 是在app_config.ENDPOINT
中指定,而存取令牌會傳遞至要求標頭的 [Authorization
] 字段中。下游 API (Microsoft Graph API) 的成功要求會傳回儲存在
api_result
變數中的 JSON 回應,並傳遞至display.html
範本進行轉譯。
顯示 API 結果
在 範本 資料夾中建立名為 display.html 的檔案。 此頁面會顯示呼叫 Microsoft Graph 端點的結果。 將下列程式代碼新增至 display.html 檔案:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Microsoft Identity Python Web App: API</title>
</head>
<body>
<a href="javascript:window.history.go(-1)">Back</a> <!-- Displayed on top of a potentially large JSON response, so it will remain visible -->
<h1>{{title}}</h1>
<pre>{{ result |tojson(indent=4) }}</pre> <!-- Just a generic json viewer -->
</body>
</html>
執行及測試範例 Web 應用程式
在您的終端機中,執行下列命令:
python3 -m flask run --debug --host=localhost --port=3000
您可以使用您選擇的連接埠。 此埠應該類似於您稍早註冊的重新導向 URI 埠。
開啟瀏覽器,然後移至
http://localhost:3000
。 您會看到登入頁面。請遵循下列步驟,使用您的Microsoft帳戶登入。 系統會要求您提供登入的電子郵件地址和密碼。
如果應用程式需要任何許可範圍,將會顯示同意畫面。 應用程式會要求許可權,以持續存取您允許的資料並讓您登入。 選擇 接受。 如果未定義任何範圍,就不會顯示此畫面。
呼叫 API
選取首頁上的 呼叫 API 連結。 應用程式會呼叫 Microsoft Graph API,以取得登入使用者的個人資料資訊。 應用程式會顯示對 API 的呼叫結果。
選擇 登出 即可登出應用程式。 系統會提示您挑選要註銷的帳戶。 選取您用來登入的帳戶。
參考數據
ms_identity_python 會抽象化 MSAL 連結庫的詳細數據。 如需詳細資訊,請參閱 MSAL Python 檔案。 此參考數據可協助您瞭解如何初始化應用程式,並使用 MSAL Python 取得令牌。