gpt4 book ai didi

node.js - SAML/ADFS node.js 实现指南?

转载 作者:IT老高 更新时间:2023-10-28 21:53:18 26 4
gpt4 key购买 nike

我想先说一下,直到现在,我什至没有听说过 SAML,更不用说开发了涉及它的 SSO 策略。再加上我一年来几乎没有做 node 的事实,这让我做了一个很棒的新手三明治。目前,我有一个客户使用 SAML 和 ADFS 作为他们的 SSO 提供商。我已经在使用passport.js 进行本地登录,因此使用passport-saml 似乎是使用SAML/ADFS 实现SSO 的方法。在进行研究时,我找到了几个不同的实现指南,但由于我对这个过程一无所知,我可以使用一些提示。

在passport-saml 文档中,我发现了以下已证明适用于ADFS 的策略(根据文档):

{
entryPoint: 'https://ad.example.net/adfs/ls/',
issuer: 'https://your-app.example.net/login/callback',
callbackUrl: 'https://your-app.example.net/login/callback',
cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==',
identifierFormat: null
}

我想我的主要问题是这个证书来自哪里?这是我通过 SSL 在我的服务器上生成的证书吗?供应商提供吗?

在我的搜索中,我还发现了这个: https://github.com/auth0/passport-wsfed-saml2 ,这是基于护照saml。建议为 ADFS 使用以下配置:
{
path: '/login/callback',
realm: 'urn:node:app',
homeRealm: '', // optionally specify an identity provider
identityProviderUrl: 'https://auth10-dev.accesscontrol.windows.net/v2/wsfederation',
cert: 'MIIDFjCCAf6gAwIBAgIQDRRprj9lv5 ... ='
}

在这个例子中,路径对象很明显,我的提供者已经给了我一个 providerURL。但是境界对我来说毫无意义,而且还有那个该死的证书。

有人可以为我提供一种在 node.js 站点中实现 SAML/ADFS SSO 的“像我一样解释”的方式吗?或者帮助我了解我概述的两个解决方案所要求的参数对象的正面或反面?非常感谢提前!

最佳答案

我最近经历了同样的思考过程:从未听说过 SAML ,我需要启用 Web 应用程序以通过 SAML 进行身份验证,使用 OneLogin 作为身份提供者(而不是 Active Directory)。

在实现过程中,我大量使用了 OneLogin 的文档和 passport-saml 库,我推荐这两个库,尽管我不隶属于其中任何一个。

我逐渐意识到混淆是三方面的:

(1) SAML 的工作原理,

(2) passport-saml 库在 Node 中是如何工作的,以及

(3) 如何配置身份提供者( OneLogin Active Directory 或其他)。接下来是我尝试“像我五岁一样解释”的解释。

SAML

安全断言标记语言 (SAML) 是一种 XML 标准,允许用户根据浏览器 session 进行登录。它有很多功能,但基本上,它可以实现更简单的身份验证过程。用户可以单击按钮而不是提交带有用户名和密码的表单。

SAML 的工作方式有点复杂。我发现 this overview from OneLogin 和随附的图表很有帮助:

SAML SSO flow, OneLogin.com

该图表示以下过程:

  • 用户单击按钮以使用 SAML 对给定应用程序(有时称为服务提供商)进行身份验证。发出请求(向 Node 或其他方式)以构建 SAML 授权请求。
  • 构造授权请求。此授权请求是 XML ( see more on OneLogin ),编码和/或加密,并作为查询参数附加到 URL。 Node 将浏览器重定向到这个 URL(类似于 https://domain.onelogin.com/trust/saml2/http-post/sso/123456?SAMLRequest=...encodedXML.. .)。
  • OneLogin 作为身份提供者,从浏览器 session 中确定用户是否已经登录。如果没有,则使用 OneLogin 的登录表单提示用户。如果是这样,浏览器会将 SAML 响应 POST 回应用程序(服务提供商)。此 SAML 响应(同样是 XML)包含有关用户的某些属性,例如 NameID。
  • 返回 Node,应用程序验证 SAML 响应并完成身份验证。

  • Node 和 passport-saml

    Passport.js 是 Node 的身份验证中间件。它需要一个策略,可能是 passport-local 之类的东西,或者在我们的例子中是 passport-saml

    由于 passport-local 策略使用用户名/密码启用 Passport 身份验证, passport-saml 策略使用浏览器 session 和可配置身份提供程序值启用 Passport 身份验证。

    虽然 passport-saml 非常适合我的目的,但它的文档很难理解。由于 OpenIdp 身份提供者处于非事件状态并且有许多可配置参数,因此配置示例不起作用。

    我关心的主要是: entryPointpath (或 callbackURL )。我只需要这两个,它们执行以下操作:
  • entryPoint 是使用授权请求重定向到的 URL(参见上面的 #2)。
  • path/callbackURL 在 Node 中设置 URL/路由,以便将 SAML 响应发布到(参见上面的 #3)。

  • 还有大量其他重要且有值(value)的参数,但可以仅使用这两个参数来配置 SAML SSO。

    身份提供程序配置

    最后,身份提供者本身需要进行配置,以便在给定 SAML 授权请求时,它知道将 SAML 响应发送到何处。在 OneLogin 的情况下,这意味着设置 ACS (Consumer) URLACS (Consumer) URL Validator ,两者都应与为passport-saml 配置的 path/ callbackURL 匹配。

    可以配置其他东西(以支持注销和其他功能),但这是验证的最低要求。

    摘要

    原始问题有两个部分:(1) 如何实现 SAML/ADFS 集成和 (2) 高级 SAML node.js 实现指南。这个答案针对第二个。

    至于与 Active Directory 的具体集成,我建议使用 passport-saml's docs on ADFS ,请记住有两个部分:配置passport-saml 以使用ADFS 身份提供者和配置您的ADFS 服务器以响应Node.js。

    关于node.js - SAML/ADFS node.js 实现指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901368/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com