SPA呼叫WebAPI呼叫WebAPI

时间:2018-06-17 11:46:34

标签: oauth-2.0 single-page-application adfs4.0 implicit-flow

我正在构建一个SPA(javascript),它将调用WebAPI A(.net MVC API),然后调用(服务器端)WebAPI B(.net MVC API)。

所有三个实体都受ADFS4(OAuth2)保护。在我的工作流程中,我希望WebAPI A代表已登录SPA的用户调用WebAPI B. 在阅读Microsoft的各种文档时,我发现以下文章中描述的场景最适用于我的情况:

https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/development/ad-fs-on-behalf-of-authentication-in-windows-server

本文假设客户端应用程序可以执行授权宏流程。不过在我的情况下,我正在处理SPA,它应该使用隐含的OAuth2流程。此外,即使我想使用授权宏流,我仍然需要在SPA的ADFS令牌端点上进行POST,这是不可能的,因为ADFS4不提供添加CORS头的方法。我当然可以在它前面部署代理并添加标题......我还没有探索过这个选项。

我找到了一个解决方案来使这项工作,但它似乎更像是对我的黑客攻击;登录期间的SPA从ADFS4请求两个令牌(1个用于WebAPI A,1个用于WebAPI B)。它将两个令牌传递给WebAPI A,后者知道第二个令牌用于访问WebAPI B.

这个解决方案看起来是否正确?我应该采取不同的做法吗?

谢谢!

PS: 1)SPA无法直接访问WebAPI B,因为它只能在内部访问。 2)假设我完全控制所有三个实体的开发。

1 个答案:

答案 0 :(得分:0)

对SPA应用程序使用授权代码流不是一个好主意,因为您必须真正保留可以生成access_token的秘密密钥,在这种情况下这是不安全的。

我建议您为spa应用程序使用隐式流,并且在服务器之间使用授权代码流,这样可以确保安全性