在 Static Web Apps 中管理驗證

已完成

您的購物清單 Web 應用程式需要一種方式來個別辨識使用者,並為使用者提供可儲存產品的個人空間。

而您可以使用驗證,對嘗試存取資訊系統的使用者驗證其身分。 我們現在將會了解驗證,以及在 Azure Static Web Apps 中實作的方式。

身分識別提供者

Azure Static Web Apps 透過下列提供者來管理驗證,從而簡化驗證體驗:

  • Microsoft Entra ID
  • GitHub
  • X

預設會啟用所有驗證提供者。 我們稍後再來看看如何使用自訂路由規則限制驗證提供者。

系統資料夾

/.auth 系統資料夾會提供所有驗證相關 API 的存取權。 您可以使用這些端點,在您的應用程式中實作完整的驗證工作流程,包括登入及登出,以及存取使用者資訊。

登入

下表列出您可以在應用程式中使用的提供者專屬登入路由。

識別提供者 登入路由
Microsoft Entra ID /.auth/login/aad
GitHub /.auth/login/github
X /.auth/login/x

例如,若要使用 GitHub 登入,您可以使用下列程式碼片段,在 Web 應用程式中加入登入連結:

<a href="/.auth/login/github">Login</a>

若想要使用者在登入之後返回特定頁面,也可以在 post_login_redirect_uri 查詢字串參數中提供 URL。 例如:

<a href="/.auth/login/github?post_login_redirect_uri=/products">Login</a>

登出

/.auth/logout 路由會將使用者登出 Web 應用程式。 您可以新增網站導覽的連結來讓使用者登出,如下列範例所示。

<a href="/.auth/logout">Log out</a>

和登入一樣,您可以使用 post_logout_redirect_uri 查詢字串參數提供登出之後重新導向的 URL:

<a href="/.auth/logout?post_logout_redirect_uri=/home">Log out</a>

存取使用者資訊

您可以透過直接存取端點或 API 函式中的特殊標頭,存取驗證相關的使用者資訊。

若將 GET 要求傳送至 /.auth/me 路由,您將會收到 JSON 物件,其中包含目前已登入使用者的資料。 未經驗證的使用者所提出的要求會傳回 null

下列範例是範例回應物件。

{
  "identityProvider": "github",
  "userId": "d75b260a64504067bfc5b2905e3b8182",
  "userDetails": "github-user-example",
  "userRoles": [ "anonymous", "authenticated" ]
}

API 函式

Azure Static Web Apps 中提供的所有 API 函式都可存取與用戶端應用程式相同的使用者資訊。 使用者資料會以 x-ms-client-principal HTTP 標頭傳遞至函式。 資料會序列化為 JSON 物件,並以 Base64 進行編碼。

下列範例函式顯示如何讀取和傳回使用者資訊。

module.exports = async function (context, req) {
  const header = req.headers["x-ms-client-principal"];
  const encoded = Buffer.from(header, "base64");
  const decoded = encoded.toString("ascii");

  context.res = {
    body: {
      userInfo: JSON.parse(decoded)
    }
  };
};

下一步

接下來,我們將在應用程式中實作完整的驗證工作流程。

檢定您的知識

1.

您要使用哪一個路由模式提出驗證要求?