透過 JavaScript 使用 Microsoft 進行驗證

您可以讓使用者使用 OAuth 供應商通過 Firebase 驗證,例如 整合一般 OAuth 登入機制的 Microsoft Azure Active Directory 進入您的應用程式,並透過 Firebase SDK 執行端對端登入流程。

事前準備

使用 Microsoft 帳戶 (Azure Active Directory 和個人) 登入使用者 Microsoft 帳戶),您必須先將 Microsoft 設為 來建立 Firebase 專案:

  1. 將 Firebase 新增至您的 JavaScript 專案
  2. Firebase 控制台中開啟「Auth」專區。
  3. 在「Sign in method」分頁中,啟用「Microsoft」供應商。
  4. 將供應商開發人員主控台中的「用戶端 ID」和「用戶端密鑰」新增至 提供者設定:
    1. 如要註冊 Microsoft OAuth 用戶端,請按照 快速入門導覽課程:使用 Azure Active Directory v2.0 端點註冊應用程式。 請注意,這個端點支援使用 Microsoft 個人帳戶和 Azure 登入 Active Directory 帳戶。 瞭解詳情 Azure Active Directory v2.0 的相關資訊。
    2. 向這些供應商註冊應用程式時,請務必註冊 專案的 *.firebaseapp.com 網域,做為專案的重新導向網域 應用程式。
  5. 按一下 [儲存]

使用 Firebase SDK 處理登入流程

如要建構網頁應用程式,最簡單的方法就是 Firebase 會使用 Microsoft 帳戶處理整個登入流程 已與 Firebase JavaScript SDK 整合

如要使用 Firebase JavaScript SDK 處理登入流程,請按照下列步驟操作:

  1. 使用提供者 ID 建立 OAuthProvider 執行個體 microsoft.com

    Web

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('microsoft.com');

    Web

    var provider = new firebase.auth.OAuthProvider('microsoft.com');
  2. 選用:指定您想要的其他自訂 OAuth 參數。 與 OAuth 要求一起傳送

    Web

    provider.setCustomParameters({
      // Force re-consent.
      prompt: 'consent',
      // Target specific email with login hint.
      login_hint: 'user@firstadd.onmicrosoft.com'
    });

    Web

    provider.setCustomParameters({
      // Force re-consent.
      prompt: 'consent',
      // Target specific email with login hint.
      login_hint: 'user@firstadd.onmicrosoft.com'
    });

    如需 Microsoft 支援的參數,請參閱 Microsoft OAuth 說明文件。 請注意,您無法透過 setCustomParameters()。這些參數都是 client_id response_typeredirect_uristatescoperesponse_mode

    只允許特定 Azure AD 用戶群的使用者簽署 插入應用程式,即 Azure AD 用戶群的易記網域名稱 可以使用用戶群 GUID ID。方法是指定 「用戶群」欄位的值。

    Web

    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'
    });

    Web

    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'
    });
  3. 選用:指定基本設定檔以外的其他 OAuth 2.0 範圍, 設為要向驗證服務供應商發出要求

    provider.addScope('mail.read');
    provider.addScope('calendars.read');
    

    詳情請參閱 Microsoft 權限和同意聲明說明文件

  4. 使用 OAuth 提供者物件向 Firebase 進行驗證。您可以提示 即可讓使用者直接登入自己的 Microsoft 帳戶,方法是開啟 彈出式視窗,或重新導向至登入頁面。重新導向方法是 在行動裝置上顯示。

    • 如要透過彈出式視窗登入,請呼叫 signInWithPopup

    Web

    import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    signInWithPopup(auth, provider)
      .then((result) => {
        // User is signed in.
        // IdP data available in result.additionalUserInfo.profile.
    
        // Get the OAuth access token and ID Token
        const credential = OAuthProvider.credentialFromResult(result);
        const accessToken = credential.accessToken;
        const idToken = credential.idToken;
      })
      .catch((error) => {
        // Handle error.
      });

    Web

    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

    Web

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);

    Web

    firebase.auth().signInWithRedirect(provider);

    使用者完成登入並返回頁面後,您就可以取得 呼叫 getRedirectResult 來取得登入結果。

    Web

    import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    getRedirectResult(auth)
      .then((result) => {
        // User is signed in.
        // IdP data available in result.additionalUserInfo.profile.
    
        // Get the OAuth access token and ID Token
        const credential = OAuthProvider.credentialFromResult(result);
        const accessToken = credential.accessToken;
        const idToken = credential.idToken;
      })
      .catch((error) => {
        // Handle error.
      });

    Web

    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.
      });

    成功完成後, 您可以從 firebase.auth.UserCredential 物件擷取提供者。 。

    使用 OAuth 存取權杖可讓您呼叫 Microsoft Graph API

    舉例來說,如要取得基本設定檔資訊,請使用下列 REST API 可以稱為:

    curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://graph.microsoft.com/v1.0/me
    

    有別於 Firebase Auth 支援的其他供應商,Microsoft 不需要 提供相片網址,並改為個人資料相片的二進位資料 透過以下方式要求: Microsoft Graph API

    除了 OAuth 存取權杖外,使用者的 OAuth ID 權杖 您也可從 firebase.auth.UserCredential 物件擷取。 ID 權杖中的 sub 憑證附加資訊僅適用於應用程式,且與聯合值不相符 Firebase 驗證所使用的使用者 ID,可透過 user.providerData[0].uid。請改用 oid 憑證欄位。 使用 Azure AD 用戶群登入時,oid 憑證附加資訊會完全相同 比對。 但如果是非用戶群的情況,系統會填補 oid 欄位。聯合 ID 4b2eabcdefghijkloid 會有表單 00000000-0000-0000-4b2e-abcdefghijkl

  5. 以上範例著重登入流程,不過您可以 能讓您使用 linkWithPopup/linkWithRedirect。舉例來說 以便將兩者登入

    Web

    import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('microsoft.com');
    const auth = getAuth();
    
    linkWithPopup(auth.currentUser, provider)
        .then((result) => {
          // Microsoft credential is linked to the current user.
          // IdP data available in result.additionalUserInfo.profile.
    
          // Get the OAuth access token and ID Token
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

    Web

    var provider = new firebase.auth.OAuthProvider('microsoft.com');
    firebase.auth().currentUser.linkWithPopup(provider)
        .then((result) => {
          // Microsoft credential is linked to the current user.
          // IdP data available in result.additionalUserInfo.profile.
          // OAuth access token can also be retrieved:
          // result.credential.accessToken
          // OAuth ID token can also be retrieved:
          // result.credential.idToken
        })
        .catch((error) => {
          // Handle error.
        });
  6. 相同的模式 reauthenticateWithPopup/reauthenticateWithRedirect,可用於 為需要近期執行的敏感作業擷取新憑證 登入。

    Web

    import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('microsoft.com');
    const auth = getAuth();
    reauthenticateWithPopup(auth.currentUser, provider)
        .then((result) => {
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
    
          // Get the OAuth access token and ID Token
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

    Web

    var provider = new firebase.auth.OAuthProvider('microsoft.com');
    firebase.auth().currentUser.reauthenticateWithPopup(provider)
        .then((result) => {
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // OAuth access token can also be retrieved:
          // result.credential.accessToken
          // OAuth ID token can also be retrieved:
          // result.credential.idToken
        })
        .catch((error) => {
          // Handle error.
        });

在 Chrome 擴充功能中使用 Firebase 驗證

如果您要建立 Chrome 擴充功能應用程式,請參閱 螢幕外文件指南

後續步驟

使用者首次登入後,系統會建立新的使用者帳戶 也就是使用者的名稱和密碼 號碼或驗證提供者資訊,也就是使用者登入時使用的網址。這項新功能 帳戶儲存為 Firebase 專案的一部分,可用來識別 即可限制使用者登入專案中的所有應用程式

  • 在應用程式中得知使用者的驗證狀態,建議做法是 在 Auth 物件上設定觀察器。接著,您就能取得使用者的 User 物件的基本個人資料資訊。詳情請見 管理使用者

  • 在你的Firebase Realtime DatabaseCloud Storage中 查看安全性規則 透過 auth 變數取得已登入使用者的不重複使用者 ID。 控管使用者可以存取的資料

您可以讓使用者透過多重驗證機制登入您的應用程式 將驗證供應商憑證連結至 現有的使用者帳戶

如要登出使用者,請呼叫 signOut

Web

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});