通过Web API对ADFS验证Angular 2

时间:2017-04-13 12:02:16

标签: asp.net-web-api oauth-2.0 owin adfs

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

类似的东西:

enter image description here

我阅读了大量有关如何实现这一目标的链接和代码,但我没有将这些内容放在一起。 据我所知,ADFS 3.0仅支持OAuth 2授权代码流,它本身不支持或建议使用JS应用程序。 我不太确定它是什么,但事实是我无法/不应该使用它。

我明白,因此我必须在我的Web服务器上实现一些身份验证服务器,我的Web API就在那里(可能是IdentityServer 3或其他东西"自制")。

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

  1. 用户请求令牌
  2. Web API检查用户是否已登录到域
  3. 已登录?
    1. 转发请求到ADFS并验证。
    2. ADFS将OAuth令牌返回给WebAPI
  4. 未登录?
    1. 向用户显示登录掩码
    2. 转发请求到ADFS并验证。
    3. ADFS将OAuth令牌返回给WebAPI
  5. Web API将OAuth令牌返回给用户
  6. 这是正确的还是完全关闭?

    无论如何,我没有将这些碎片放在一起。 我看到很多代码在Web API中创建JWT令牌(但不与ADFS通信)或通过WS-Federation与ADFS通信。 另外ADFS' OAuth 2实现似乎有点特殊,这增加了另一层复杂性。

    所以我的问题是:

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

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

1 个答案:

答案 0 :(得分:1)

您需要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仅支持授权代码流,该代理流仅适用于公共客户端与Web API通信的本机应用程序。

由于

// Sam(Twitter: @MADADFS