使用SSO而不是OAUTH的Web API认证/授权

根据下面的@ user18044提问进行更新

如果用户通过两个不同的基于SAML的身份提供商在两个不同的Web应用程序中进行身份验证,并且其中一个应用程序需要从其他应用程序公开的Web API请求数据,那么是否可以安全地调用Web API方法凭借用户当前在两个应用程序中的身份验证状态,而无需通过API级别的身份验证协议(如OAUTH)单独保护API方法? 请注意,这两个应用程序都由我的公司拥有和运营,并且共享相同的二级域和用户群,即使身份服务器不同(一个是遗留的)。

一些进一步的信息:应用程序A是一个门户应用程序,它将使用从应用程序B提供的数据来托管窗口小部件。应用程序A将仅通过由应用程序B公开的Web API与应用程序B进行通信。当前应用程序B不公开Web API(应用程序本身除外)。 这是需要添加到应用程序B的新功能。应用程序A将使用Okta作为其SSO。 我们的首席架构师的建议是继续使用我们基于dk.nita.saml20 DLL在内部开发的定制传统IDP服务器。 我相信它们都是基于SAML的,但我不认为它们可以在不进行某些改进的情况下共享相同的身份标识。 但是这正在我对认证主题知识的限制中发挥作用。 :)我认为我们的架构师的计划是让用户使用两个不同的身份提供者单独进行身份验证,然后只使用CORS来保护Web API,他的推理是由于用户已经知道并通过身份验证来使用应用程序B,在允许应用程序A调用应用程序B的web api方法时不会产生任何安全隐患,因为用户应该在应用程序B中进行身份验证。这对我来说似乎很古怪,因为我可以想象很多浏览器重定向发生的可能不透明给用户,但除此之外,我只是想弄清楚安全漏洞可能存在的位置,因为它让我觉得会有一些漏洞。

我知道这种做法不被认为是最佳做法,但是据说,我真的想明白为什么不这样做。 是否存在安全隐患? 它甚至会工作吗? 如果是这样,在实施过程中是否有任何“陷阱”或需要考虑的事项?

重申一下,我们的首席架构师正在提出这个解决方案,并且它没有通过我的直觉检查,但是我对这个话题的了解不够充分,无法证明我的立场合理,或者感到足够接受他的立场。 希望那里的一些安全专家能够启发我。


如果不知道更多关于如何确保当前应用程序和API的安全性,则很难回答。 Web应用程序及其API是否具有相同的依赖方标识符(即,是否可以使用相同的标记对两者进行身份验证)?

如果两个Web应用程序都使用WS-Federation协议对用户进行身份验证,那么很可能SAML令牌将存储在身份提供者将令牌回发给应用程序时设置的Cookie中。

您无法从JavaScript访问这些Cookie。 如果属于应用程序B的Web API使用相同的基于cookie的身份验证机制,则可以使用此功能,前提是允许跨源数据共享。

如果您的Web API使用像承载令牌认证方案(如OAuth)或在STS中具有不同的依赖方ID,则显然不起作用。

我认为你的直觉检查失败的原因是因为你基本上以跨站请求伪造攻击的方式访问web API。

我用这种方法看到的一个问题是,如果用户未通过其他Web应用程序的身份验证,则对API的调用也会失败。


只要基于跨站点请求伪造攻击和应用程序之间的安全性,我同意user18044。 如果用户X有权访问应用程序A,是否有权访问应用程序B,反之亦然? 如果情况并非如此,那么每个应用程序将需要分别进行身份验证......并且它不会是SSO。 我发现这些链接可能对您的情况有所帮助。

https://stackoverflow.com/questions/5583460/how-to-implement-secure-single-sign-on-across-various-web-apps

https://developer.salesforce.com/page/Implementing_Single_Sign-On_Across_Multiple_Organizations

链接地址: http://www.djcxy.com/p/22263.html

上一篇: Web API authentication/authorization using SSO instead of OAUTH

下一篇: What is the difference between JAAS, SAML and Realm