使用 Angular 和 TypeScript 通过 Azure AD B2C 真实验证

阅读时长 10 分钟读完

简介

本文将介绍如何使用 Angular 和 TypeScript 在 Azure AD B2C 上进行真实验证。Azure AD B2C 是一个面向消费者和企业的云身份验证解决方案,可帮助您构建可靠的、安全的、可伸缩的应用程序。

我们将使用 Angular CLI 创建项目,使用 Azure AD B2C 配置认证策略,并使用 TypeScript 和 Angular 编写真实的代码。

Azure AD B2C 配置

在 Azure 门户中,创建一个名为“myb2c”的应用程序。在应用程序中,创建一个名为“myb2c-policies”的策略。打开“myb2c-policies”的所有策略的“Identity Providers”选项卡,启用 Microsoft 身份验证的支持。此外,您可以启用更多的身份验证提供者,例如 Google、Facebook 等。

在“myb2c-policies”的所有策略中,确保“Application claims”选项卡中启用了必要的声明,例如“signInNames.emailAddress”和“extension_access”.。此外,您还需要设置“Sign-up Policy”的“sign-up attributes”,例如用户的姓名、电子邮件地址等。

Angular 项目创建

在命令行中使用 Angular CLI 创建项目,执行以下命令:

完成后进入目录:

添加依赖包

添加依赖项 angular-oauth2-oidc:

配置应用程序

编辑 app.module.ts 文件并直接在模块中导入以下模块:

在 NgModule 中添加以下项:

-- -------------------- ---- -------
-------- -
  --------------
  -----------------
  -----------------
  ----------------------
  --------------------
    --------- -----------------
    ---------- -----------------
    ------------------ -----
    ------------ ---------------------- - ----
    -------------------------- ------
  ---
--

---------- -
  -
    -------- ------------------
    --------- ------------------
    ------ ----
  --
  --------------
--

---------- -
  ------------
--

请注意,您需要在“clientID”和“authority”中设置 Azure AD B2C 中的值。另外,我们在 NgModules 中添加了“providers“以指定我们自己的验证服务和 HTTP 拦截器。

编写自定义服务

我们需要编写自己的认证服务,以实现用户验证和授权。我们称它为“my-auth.service.ts”:

-- -------------------- ---- -------
-------------
------ ----- ------------- ---------- ----------- -
  ------- ------- - --- --------- --------------- ----------------------------------- ---

  ------------------- ------------- ------------- --

  ------------- -
    -- ----------------------------------------- -
      ------ -----
    -
    ------ ------
  -

  ------- -
    ----------------------------------
  -

  -------- -
    ---------------------------
  -

  ------------ -
    ------ ----------------------------------------
  -
-

我们提供了这些方法:

  • canActivate()
  • login()
  • hlogout()
  • isLoggedIn()

您还需要按照以下方法对 OAuthService 进行配置:

-- -------------------- ---- -------
-----------------------------
  -------------- ----------------------------------------------------------------
  --------- -------------------------------------------------------------------------------------
  --------- -----------------
  ------ ------- ----- ------- ----------------
  ------------- --------- -------
  ---------------------- ---------------------- - ----
  ---------------------------------- ------
  ----------------- -----
  ------------------------- ---------------------- - ----
  --------------------- ------
  ------------------- -----
  ---------------------------- ------
  ---------------- -----
  --------------------- -----
  ------------------ -
    -------------- -----------
    ------ ----------
  --
  ------------------ ----------------------
  -------- ---------------
---

请注意,您需要在“tokenEndpoint”、“loginUrl”和“clientId”中设置 Azure AD B2C 中的值。您还可以设置自定义查询参数、存储方式,以及其他 OAuth 配置。

编写拦截器

我们还需要编写 HTTP 拦截器,以确保路由需要身份验证。我们称它为“my-http.interceptor.ts”:

-- -------------------- ---- -------
-------------
------ ----- ----------------- ---------- --------------- -
  ------------------- -------- -------------- --

  ------------------ ----------------- ----- ------------- -------------------------- -
    -- --------------------------- -
      ----- ----- - ------------------------------
      ------- - ---------------
        ----------- -
          -------------- ------- ----------
        --
      ---
    -

    ------ ---------------------
  -
-

请注意,我们使用 AuthService 中的“isLoggedOn()”来检查用户是否已验证并获取访问令牌,以设置 HTTP 请求头。

编写组件

现在,我们可以开始编写组件。在“app.component.ts”中,我们将使用 MyAuthService 并导入 Microsoft Graph API:

-- -------------------- ---- -------
------ - ---------- ------ - ---- ----------------
------ - ------------- - ---- -----------------------------
------ - -- -------------- ---- -----------------------------------

------------
  --------- -----------
  ------------ -----------------------
  ---------- -------------------------
--
------ ----- ------------ ---------- ------ -
  ----- - -------------
  ----- --------------------

  ------------------- ------------ -------------- --

  ---------- -
    -- ------------------------------- -
      ----------------------------------------------- ---- -- -
        --------- - -----
      ---
    -
  -

  ------- -
    -------------------------
  -

  -------- -
    --------------------------
  -
-

在 HTML 模板中,我们使用以下标记:

-- -------------------- ---- -------
---- -------------
  ------- -- ---------------- --
------

---- --------------
  ------- ---------------------- -----------
------

---- -------------
  ------- ----------------------- ------------
------

请注意,我们导入了“Microsoft Graph API”以获取有关已登录用户的信息。在 ngOnInit() 中,我们检查用户是否已经登录,如果是,我们使用“getUserInfo()”方法在服务中检索用户信息并将其分配给“user”属性。

结论

通过本文,你已经了解了如何使用 Angular + TypeScript + Azure AD B2C 实现真实的身份验证和授权服务,并自定义了一些组件和拦截器。这对于构建可扩展、安全的 Web 应用程序非常有用。在此基础上,可以继续编写更复杂和功能强大的应用程序,升级使用最新和最先进的云身份验证解决方案。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6749d026a1ce006354717ad0

纠错
反馈