npm 包 wicked-saml 使用教程

阅读时长 10 分钟读完

简介

wicked-saml 是一个 npm 包,它提供了一种使用 SAML(Security Assertion Markup Language)进行身份验证的简单方法。它可以用于 Node.js 应用程序以及用于使用 Node.js 的其他后端应用程序。

在这篇文章中,我们将了解如何使用 wicked-saml 进行身份验证,并将在示例应用程序中演示他的用法。

安装

在使用 wicked-saml 之前,您需要先安装它。您可以使用 npm 进行安装:

使用

在您的应用程序中使用 wicked-saml 是相当简单的。首先,您需要将身份提供程序的元数据下载到您的项目中。这是由身份提供程序提供的 XML 文件。该文件将包含有关实体和其公钥的元数据。

下载完元数据,你可以将其用于 SAML 验证:

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

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

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

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

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

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

其中,你需要将身份提供程序的元数据传递给 saml 的 verifyAssertion 方法。这个方法将检查 SAML 响应是否有效,并将返回一个布尔值指示验证是否通过。如果验证通过,您可以从 SAML 声明中获取用户信息。

示例应用程序

让我们创建一个简单的示例应用程序来显示如何使用 wicked-saml 来验证用户身份。该应用程序将仅包含一个登录和一个访问受保护的页面的简单示例。

我们的示例应用程序将与名为 idp.example.com 的身份提供程序进行通信。元数据文件可以在 http://idp.example.com/metadata.xml 上获得。

默认元数据中的配置

示例 metadata.xml 文件将包含以下内容:

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

在这个元数据文件中,我们可以看到在单点登录服务(Single Sign-On Service)中,使用了 HTTP-Redirect 的绑定(Binding)。回调地址(Recipient)指向我们自己的节点应该接收起事务的结果。

创建示例应用程序

在本示例的 package.json 文件中,示例应用程序使用 express 作为静态文件服务器。

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

index.js

首先,我们需要将模块粘贴到 index.js 中,并使用它来启动我们的服务器:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在这个示例应用程序中,我们使用了 express,创建了三个路由:

  • /:这个路由仅包含一个链接,它将重定向到 /login 路由。
  • /login:使用 SAML 进行验证,并将用户重定向到 / 路由。
  • /pteotected:这个路由是需要身份验证的,如果没有验证,将返回 401 状态码。

我们将匹配 SAML 响应的函数放在了 /sso/callback 路由中。

使用 SAML 进行身份验证的流程如下:

  • 用户单击 /login 链接,网站构建 SAML 请求,并将其重定向到 SSO 服务器。
  • SSO 服务器验证用户并需求其输入凭证。
  • 如果用户验证通过,则 SSO 服务器将响应 SAML 响应到 http://localhost:3000/sso/callback,并指向正确的重定向地址。
  • 网站解析 SAML 响应,将用户 ID 存储在本地,并将其重定向到保护页面。
  • 对于 /protected 路由,如果用户没有会话或会话中没有有效的用户 ID,则返回 401。

运行示例应用程序

将以下内容添加到保存为 Dockerfile 的文件中:

构建 Docker 镜像:

启动容器:

在浏览器中打开 http://localhost:3000,您将看到 "Login" 的链接,单击后输入凭证进行测试。输入验证通过的凭证,将被重定向到 "http://localhost:3000/protected",并看到 "Hello, your_name!" 的文本。如果未进行验证,则返回 401。

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

纠错
反馈