首页 > 解决方案 > 使用 JWT 令牌 + Shibboleth SSO 保护节点 JS API

问题描述

我的问题:如何使用具有 Shibboleth SSO 作为身份验证机制的 JWT 令牌来保护我的 Node JS API?

[我的申请流程]


[保护 API 的普通 JWT 场景]


[我的 JWT 场景和问题]


[有缺陷的方法]


所以我的问题是:如何使用具有 Shibboleth SSO 作为身份验证机制的 JWT 令牌来保护我的 Node JS API?


我希望,我可能已经正确地解释了我的情况。任何帮助、指导或正确的方向将不胜感激。

谢谢 :)

标签: node.jsauthenticationjwtsingle-sign-onshibboleth

解决方案


本文解释了 [NORMAL JWT SCENARIO TO SECURE API] 策略:https ://medium.com/front-end-weekly/learn-using-jwt-with-passport-authentication-9761539c4314 。

假设您使用像 Node Express 这样的库来实现 API 资源端点,您可以使用像 Passport 这样的应用程序中间件来处理身份验证并限制只有拥有有效 JWT 令牌的客户端才能访问资源:

  • NodeJS 后端应用程序实现了基于用户名和密码的本地 Passport 策略,以及生成和签署 JWT 令牌的逻辑。
  • AngularJS 应用程序调用/login后端的端点并提供 JWT 令牌。
  • AngularJS 应用程序在向受保护资源端点发出的任何后续请求中都包含 JWT 令牌。

此时我们介绍[MY JWT SCENARIO AND PROBLEM]:当用户到达 AngularJS 应用程序时,他已经通过了 Shibboleth SSO 的身份验证。并且您希望通过允许 AngularJS 应用程序向 NodeJS 后端提供自己的用户名/密码来确保他不能脱离 SSO 上下文。

这需要一种可信的方式来验证 NodeJS 后端中的 IdP 提供给 AngularJS 应用程序的 SAML2 断言。根据https://community.apigee.com/articles/33625/saml-20-vs-jwt-understanding-federated-identity-an.html上的 SAML 描述,需要在 NodeJS 后端之间建立信任和 IDP,以便后端可以验证 AngularJS 应用程序提供的 SAML 断言。

为此,我从这篇文章中得到了我的理论答案: https ://wiki.library.ucsf.edu/spaces/flyingpdf/pdfpageexport.action?pageId=361762610 。它基本上扩展了上面已经讨论过的 JWT-token 实现,如下所示:

  • 包括一个passport-saml策略,以便与 Shibboleth SSO 通信以进行 SAML2 断言验证,并将 NodeJS 后端注册为 IdP 的 SP(请参阅上述链接中的向 IDP 提供 SP 元数据部分)。
  • 删除受本地策略保护的原始/login端点,因为我们不希望允许未经验证的用户名/密码登录。
  • /ssologin在 NodeJS 后端创建一个端点,并使用 SAML 策略通过 Passport 身份验证保护对路由的访问。AngularJS 应用程序将调用此端点并传递 SAML2 断言作为尝试访问它的一部分。
  • 实现/ssologin路由的动作。仅当 NodeJS 应用已针对 Shibboleth SSO (IdP) 验证了 SAML2 断言时,才会调用此方法。您现在可以使用来自 SAML 断言的信息在后端生成 JWT 令牌并将其返回给 AngularJS 应用程序。
  • 所有其他资源端点仍然受到 JWT Passport 策略的保护。AngularJS 应用程序每次想要访问它们时都需要发送 JWT 令牌。

希望它有助于设计一个明确的解决方案。


推荐阅读