我正在构建一个SPA(javascript),它将调用WebAPI A(.net MVC API),然后调用(服务器端)WebAPI B(.net MVC API)。
所有三个实体都受ADFS4(OAuth2)保护。在我的工作流程中,我希望WebAPI A代表已登录SPA的用户调用WebAPI B. 在阅读Microsoft的各种文档时,我发现以下文章中描述的场景最适用于我的情况:
本文假设客户端应用程序可以执行授权宏流程。不过在我的情况下,我正在处理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)假设我完全控制所有三个实体的开发。
答案 0 :(得分:0)
对SPA应用程序使用授权代码流不是一个好主意,因为您必须真正保留可以生成access_token的秘密密钥,在这种情况下这是不安全的。
我建议您为spa应用程序使用隐式流,并且在服务器之间使用授权代码流,这样可以确保安全性