透過 Microsoft 登入使用者
本文件說明如何使用 Identity Platform 透過 Microsoft 登入使用者帳戶。支援個人 Microsoft 帳戶和 Azure Active Directory (Azure AD) 帳戶。
事前準備
本教學課程假設您已啟用 Identity Platform,並且有使用 HTML 和 JavaScript 編寫的基本網頁應用程式。如要瞭解如何操作,請參閱快速入門。
將 Microsoft 設為供應者
如要將 Microsoft 設為識別資訊提供者,請按照下列步驟操作:
前往 Google Cloud 控制台的「Identity Providers」頁面。
按一下「Add A Provider」。
從清單中選取「Microsoft」Microsoft。
輸入 Microsoft 應用程式 ID 和 應用程式密鑰。如果您還沒有 ID 和密碼,請按照「快速入門:使用 Azure AD 2.0 端點註冊應用程式」一文中的步驟取得。
這個端點支援個人 Microsoft 帳戶和 Azure AD 帳戶。請參閱 Microsoft 身分識別平台 (第 2.0 版) 總覽,進一步瞭解 Azure AD。
將「Configure Microsoft」下列出的 URI 設定為 Microsoft 應用程式的有效 OAuth 重新導向 URI。如果您在 Identity Platform 中設定了自訂網域,請更新 Microsoft 應用程式設定中的重新導向 URI,以便使用自訂網域而非預設網域。例如,將
https://myproject.firebaseapp.com/__/auth/handler
變更為https://auth.myownpersonaldomain.com/__/auth/handler
。按一下「Authorized Domains」下方的「Add Domain」,即可註冊應用程式的網域。為方便開發,
localhost
已預設為啟用。按一下「設定應用程式」下方的「設定詳細資料」。將程式碼片段複製到應用程式的程式碼中,即可初始化 Identity Platform 用戶端 SDK。
按一下 [儲存]。
使用用戶端 SDK 登入使用者
建立
OAuthProvider
物件的例項,並將microsoft.com
傳遞為供應商 ID:JavaScript
var provider = new firebase.auth.OAuthProvider('microsoft.com');
選用步驟:新增 OAuth 範圍。範圍會指定您要從 Microsoft 要求哪些資料。較機密的資料可能需要特定範圍。請參閱 Microsoft 的說明文件,判斷應用程式需要哪些權限範圍。
JavaScript
provider.addScope('mail.read'); provider.addScope('calendars.read');
選用:指定其他自訂 OAuth 參數。這些屬性專屬於 Microsoft,通常用於自訂驗證體驗。
JavaScript
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. login_hint: 'user@firstadd.onmicrosoft.com' });
您可以使用
mkt
參數自訂驗證流程的語言。例如:provider.setCustomParameters({ mkt: 'fr' });
您可以使用
tenant
屬性,限制特定 Azure AD 網域以外使用者的存取權。請指定用戶群的易記網域名稱或 GUID ID。不在這個網域中的使用者將無法登入。例如:provider.setCustomParameters({ // Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". tenant: 'TENANT_ID' });
如需 Microsoft 支援的完整參數清單,請參閱 Microsoft OAuth 說明文件。請注意,您無法傳遞 OAuth 或 Identity Platform 保留的參數。
使用
OAuthProvider
物件登入使用者。您可以開啟彈出式視窗,或重新導向目前的網頁。使用者在行動裝置上更容易重新導向。如要顯示彈出式視窗,請呼叫
signInWithPopup()
:JavaScript
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
如要重新導向網頁,請先呼叫
signInWithRedirect()
:使用
signInWithRedirect
、linkWithRedirect
或reauthenticateWithRedirect
時,請遵循最佳做法。JavaScript
firebase.auth().signInWithRedirect(provider);
接著,在頁面載入時呼叫
getRedirectResult()
,藉此擷取 Microsoft 權杖:JavaScript
firebase.auth().getRedirectResult() .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
取得存取權杖後,您可以使用該權杖呼叫 Microsoft Graph API。例如:
REST
curl -i -H "Authorization: Bearer [ACCESS_TOKEN]" https://graph.microsoft.com/v1.0/me
與 Identity Platform 支援的其他提供者不同,Microsoft 不會為使用者提供相片網址。您必須改用 Graph API 來要求相片的二進位資料。
除了存取權杖外,您還可以擷取使用者的 Microsoft ID 權杖。這個權杖中的 oid
要求包含使用者的專屬 ID。您可以將此 ID 與位於 user.providerData[0].uid
的 ID 進行比較。如果使用者是透過 Azure AD 用戶群登入,這些欄位會完全相符。如果不是,欄位會以零填補 (例如聯盟 ID 4b2eabcdefghijkl
會顯示為 00000000-0000-0000-4b2e-abcdefghijkl
)。
請勿使用 sub
聲明來比較使用者 ID。sub
宣告是特定應用程式專屬,與 Microsoft 使用的 ID 不符。
手動登入使用者
其他 Identity Platform 供應商 (例如 Google、Facebook 和 Twitter) 允許您呼叫 signInWithCredential()
,手動登入使用者。
Microsoft 不支援這項功能。Identity Platform 無法驗證 Microsoft OAuth 存取權權杖的目標對象,而這項功能是重要的安全性要求。
如果您無法使用 Identity Platform 用戶端 SDK 讓使用者登入,就必須使用第三方 OAuth 程式庫來驗證 Microsoft。接著,您可以使用自訂驗證功能,將 Microsoft 憑證換成自訂權杖。
後續步驟
- 進一步瞭解 Identity Platform 使用者。
- 使用其他身分識別提供者登入使用者。