我在过去的日子里正在努力配置认证+授权系统以使用来自移动应用程序的REST API的可能方法。
场景:我们已经为服务多个用户的大客户开发了3个独立的门户。为了为3个门户启用SSO,我们已经使用SimpleSAMLphp实现了SAML身份验证系统。每个门户网站都有一个服务提供商,并且它们针对中央IdP发出断言请求。IdP将对照在注册过程中密码被散列和存储的数据库检查用户名和密码。登录后,门户网站上的授权由服务器上的会话处理,到目前为止一切正常。
现在,客户要求我们开发一个移动应用程序,该应用程序将要求用户登录和访问在使用3个门户期间收集的一些受保护资源。
[我们决定使用ionic开发一个前端应用程序,它将使用在node.js中制成的REST API,该REST API将为所有数据(受保护和不受保护的资源)提供服务。
现在出现了一个问题:要授权对Api上受保护资源的访问,我们希望使用JWT轻松实现无状态系统。疑问是如何执行身份验证?我们有机会跳过SAML流程直接针对数据库检查凭据,否则我们将实现一个解决方案,其中SSO IdP充当身份验证提供程序,然后在尝试成功时API应用程序将从idp,然后将签名的jwt发行给使用者客户端。这第二种方式是常见的实现吗?可能吗?
您建议遵循什么路径?第一个可能非常容易实现,但是由于我们在应用程序的前端使用html + js,因此,如果我们决定在不久的将来使用第二个解决方案,我们可以从应用程序中回收一些代码,以使应用程序中的某些功能现代化Web门户网站,维护jwt模式并在网络上使用新的Api。我相信,在这种情况下,使用门户网站会话中已经登录的用户数据来向新api请求令牌会更容易。听起来可能吗?
我希望一切都清楚,任何帮助将不胜感激!
谢谢
这里的主要目标是通过最新的安全标准(OAuth 2.0和Open Id Connect)。SAML是不兼容Web /移动设备/ API的过时协议,不适合现代编码模型。
听起来像您想执行OAuth,但您没有OAuth授权服务器,这是解决方案的关键部分。如果您可以迁移到一个,那么将来将为您的应用程序提供最佳选择。
OPTION 1
使用最标准,最简单的选项-但用户必须使用新的登录屏幕和凭据登录:
OPTION 2
扩展选项1以联合到您的SAML身份提供程序-使用户可以以现有方式登录:
OPTION 3
使用桥接解决方案(不推荐使用,但是如果您没有适当的授权服务器,有时值得考虑-至少它使用OAuth令牌获取您的应用):