透過 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 應用程式 ID 和應用程式密鑰。如果沒有 ID 和密鑰,請按照「快速入門:向 Azure AD v2.0 端點註冊應用程式」一文中的步驟取得。
這個端點同時支援個人 Microsoft 帳戶和 Azure AD 帳戶。如要進一步瞭解 Azure AD,請參閱「Microsoft 身分識別平台 (第 2.0 版) 總覽」。
將「設定 Microsoft」下方列出的 URI,設定為 Microsoft 應用程式的有效 OAuth 重新導向 URI。如果您在 Identity Platform 中設定了自訂網域,請更新 Microsoft 應用程式設定中的重新導向 URI,改用自訂網域,而非預設網域。舉例來說,將
https://myproject.firebaseapp.com/__/auth/handler變更為https://auth.myownpersonaldomain.com/__/auth/handler。按一下「已授權網域」下方的「新增網域」,註冊應用程式的網域。為方便開發,
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 使用者。
- 透過其他身分識別提供者登入使用者。