0

我正在构建一个 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

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

我找到了一个解决方案来完成这项工作,但它对我来说更像是一个 hack;登录期间的 SPA 从 ADFS4 请求两个令牌(1 个用于 WebAPI A,1 个用于 WebAPI B)。它将两个令牌传递给知道第二个令牌用于访问 WebAPI B 的 WebAPI A。

这个解决方案看起来正确吗?我应该做一些不同的事情吗?

谢谢!

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

4

1 回答 1

0

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

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

于 2018-08-10T15:45:13.303 回答