通过 Web API 针对 ADFS 验证 Angular 2

authenticate Angular 2 against ADFS via Web API

我有一个 angular 2 应用程序、一个带有 OWIN 管道 (.NET 4.6) 的 Web API 和一个 ADFS 3.0。每个使用 angular 2 应用程序的用户都需要通过 ADFS 进行身份验证和授权,如果他已经登录域,他应该自动登录到应用程序(单点登录)

类似的东西:

我阅读了大量有关如何实现该目标的链接和代码,但我未能将各个部分组合在一起。 据我了解,ADFS 3.0 仅支持 OAuth 2 授权代码流,它在 Web 本身上分别不受支持或建议使用 JS 应用程序。 我不太确定它是哪个,但事实是我不能't/shouldn使用它。

我知道因此我必须在我的网络 API 所在的网络服务器上实施某种身份验证服务器(可能是 IdentityServer 3 或其他东西 "homemade")。

这让我认为我应该使用 ADFS 作为外部登录,例如 google,或者 facebook,这将导致以下工作流程

  1. 用户请求令牌
  2. Web API 检查用户是否已经登录域
  3. 登录了吗?
    1. 将请求转发到 ADFS 并验证。
    2. ADFS returns OAuth 令牌到 WebAPI
  4. 没有登录?
    1. 向用户显示登录掩码
    2. 将请求转发到 ADFS 并验证。
    3. ADFS returns OAuth 令牌到 WebAPI
  5. Web API return 用户的 OAuth 令牌

这是正确的还是我完全离开了?

反正我没能把这些碎片拼在一起。 我看到很多代码在 Web API 中创建 JWT 令牌(但不与 ADFS 通信)或通过 WS-Federation 与 ADFS 通信。 此外,ADFS 的 OAuth 2 实施似乎有点特殊,这增加了另一层复杂性。

所以我的问题是:

如何在针对 ADFS 进行身份验证时向用户提供 OAuth 令牌?

如果您需要任何其他信息,我很乐意提供

您将需要 ADFS 2016,它支持使用 Angular.JS 的单页应用程序。有关流程和示例代码,请参阅 https://technet.microsoft.com/en-us/windows-server-docs/identity/ad-fs/development/single-page-application-with-ad-fs

您说得对,ADFS 2012R2 仅支持授权代码流,这仅适用于 public 客户端与 Web api 通信的本机应用程序。

谢谢

//山姆(推特:@MrADFS