关于ASP.NET Web API:通过Web API针对ADFS验证Angular 2

authenticate Angular 2 against ADFS via Web API

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

像这样:

enter image description here

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

我知道,因此我必须在Web API所在的Web服务器上实现某种身份验证服务器(可能是IdentityServer 3或"自制"的东西)。

这使我认为我应该将ADFS用作google或facebook之类的外部登录名,这将导致以下工作流程

  • 用户请求令牌
  • Web API检查用户是否已经登录到域
  • 登录?

  • 将请求转发给ADFS并进行验证。
  • ADFS将OAuth令牌返回到WebAPI
  • 未登录?

  • 向用户显示登录掩码
  • 将请求转发给ADFS并进行验证。
  • ADFS将OAuth令牌返回到WebAPI
  • Web API向用户返回OAuth令牌
  • 这是正确的还是我完全无法接受?

    无论如何,我都无法拼凑而成。
    我看到了很多在Web API中创建JWT令牌的代码(但不与ADFS通信)或通过WS-Federation与ADFS通信。
    此外,ADFS的OAuth 2实现似乎有些特殊,这又增加了另一层复杂性。

    所以我的问题是:

    通过ADFS进行身份验证时,如何向用户提供OAuth令牌?

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


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

    没错,ADFS 2012R2仅支持授权代码流,这仅适用于作为公共客户端与Web api进行通信的本机应用程序。

    谢谢

    //萨姆(Twitter:@MrADFS)