npm 包 cig-saml 使用教程

阅读时长 6 分钟读完

前言

单点登录(SSO)是一种常见的身份验证方法,允许用户使用一组凭据(例如用户名和密码)来访问多个应用程序。 Security Assertion Markup Language(SAML)是用于在不同的安全域之间进行 SSO 的 XML 格式的标准协议。在前端开发中,我们可以使用 npm 包 cig-saml 来实现 SSO 功能,本教程将详细介绍如何使用 cig-saml。

准备工作

在使用 cig-saml 之前,需要先安装 Node.js。安装 Node.js 的方法可以参考 Node.js 官网的安装教程

安装 cig-saml

在安装完 Node.js 后,我们可以使用 npm 包管理器来安装 cig-saml。在终端中输入以下命令即可:

配置 SAML 环境

在配置 SAML 环境之前,需要清楚自己的身份提供商(IdP)和服务提供商(SP)信息,这些信息通常由身份提供商提供。在此教程中,我们将使用 Okta 作为身份提供商示例。

在 Okta 管理控制台中,我们需要创建一个新的应用程序并选择 SAML 2.0 作为身份验证协议。在创建应用程序时,需要提供以下信息:

  • 应用程序名称
  • ACS URL:服务提供商的回调 URL,用于接收 SAML 响应。
  • SP Entity ID:服务提供商的实体 ID。
  • Single Logout URL:服务提供商单点注销的 URL,可选。
  • Audience URI:与 SP Entity ID 相同,用于指定服务提供商的目标受众。
  • 单点登录 URL:身份提供商的登录页面 URL。
  • 验证响应 URL:身份提供商响应的验证 URL。

在创建好应用程序后,我们可以在应用程序设置中查看 IdP 和 SP 的配置信息。

在代码中,我们需要使用以下信息来配置 SAML 环境:

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

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

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

其中:

  • path:SAML 回调 URL(ACS URL)。
  • protocol:协议,可以是 HTTP 或 HTTPS。
  • issuer:服务提供商的实体 ID(SP Entity ID)。
  • cert:身份提供商的公钥证书。
  • privateCert:服务提供商的私钥证书。
  • decryptionPvk:服务提供商的解密密钥。
  • signatureAlgorithm:签名算法,可以是 sha256、sha384 或 sha512。
  • identifierFormat:标识符格式,可以是 urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified 或其他格式。
  • acceptedClockSkewMs:接受的时钟偏差毫秒数,默认为 0。
  • validateInResponseTo:是否验证 SAML 响应中的 InResponseTo 属性。
  • disableRequestedAuthnContext:是否禁用所需的认证上下文。

SSO 流程

在 SAML 环境配置完毕后,我们可以实现 SSO 流程。在此教程中,我们将以 Express.js 框架为例,以下是实现 SSO 流程的代码:

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

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

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

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

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

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

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

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

在以上代码中,我们定义了三个路由:

  1. /login:生成用于登录的 SAML URL,并在浏览器中重定向到登录页面。
  2. /saml/callback:处理 SAML 响应,验证响应并设置用户会话。
  3. /logout:生成用于注销的 SAML URL,并在浏览器中重定向到注销页面。

结语

本教程详细介绍了如何使用 npm 包 cig-saml 实现 SSO 功能,并提供了完整的示例代码。通过学习本教程,读者可以了解到 SAML 协议的基本概念和流程,并能够使用 cig-saml 快速实现 SSO 功能。

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

纠错
反馈