我的问题:如何使用具有Shibboleth SSO作为身份验证机制的JWT令牌保护Node JS API?
[我的申请流程]
[用于保护API的标准JWT场景]
[我的JWT场景和问题]
[一种有缺陷的方法]
同样,我的问题是:如何使用具有Shibboleth SSO作为身份验证机制的JWT令牌保护Node JS API?
我希望,我可能已经正确解释了我的情况。任何帮助,指导或正确的方向将不胜感激。
谢谢:)
答案 0 :(得分:1)
本文介绍了[NORMAL JWT安全场景API]策略:https://medium.com/front-end-weekly/learn-using-jwt-with-passport-authentication-9761539c4314。
假设您使用Node Express之类的库来实现API资源终结点,则可以利用Passport之类的应用中间件来处理身份验证,并仅对拥有有效JWT令牌的客户端限制对资源的访问:
/login
端点,并为其提供JWT令牌。 此刻,我们介绍[MY JWT场景和问题]:当用户使用AngularJS应用时,他已经通过Shibboleth SSO进行了身份验证。并且您想通过允许AngularJS应用程序向NodeJS后端提供自己的用户名/密码来确保他不能脱离SSO上下文。
这需要一种可靠的方式来验证NodeJS后端中IdP提供给AngularJS应用的SAML2断言。根据{{3}}上可用的SAML描述,这要求在NodeJS后端和IDP之间建立信任关系,以便后端可以验证AngularJS应用提供的SAML断言。
为此,我从本文https://community.apigee.com/articles/33625/saml-20-vs-jwt-understanding-federated-identity-an.html启发了我的 理论答案 。它基本上扩展了上面已经讨论过的JWT令牌实现,如下所示:
passport-saml
策略,以便与Shibboleth SSO通信以进行SAML2断言验证,并将NodeJS后端作为SP注册到IdP(请参阅将SP元数据提供给IDP 上方链接中的“”部分。/login
端点,因为我们不希望允许未经验证的用户名/密码登录。 /ssologin
端点,并使用SAML策略通过Passport身份验证保护对路由的访问。 AngularJS应用程序将调用此终结点并传递SAML2断言作为尝试访问它的一部分。 /ssologin
路由执行操作。仅当NodeJS应用已针对Shibboleth SSO(IdP)验证了SAML2断言时,才会调用此方法。现在,您可以使用SAML断言中的信息在后端生成JWT令牌,并将其返回到AngularJS应用。希望它有助于设计最终的解决方案。