我有一个角度2应用程序,一个带有OWIN管道(.NET 4.6)的Web API和一个ADFS 3.0 . 使用angular 2应用程序的每个用户都需要通过ADFS进行身份验证和授权,如果他已经登录域,他应该自动登录到应用程序(单点登录)
像这样的东西:
我阅读了大量有关如何实现这一目标的链接和代码,但我没有将这些内容放在一起 . 据我所知,ADFS 3.0仅支持OAuth 2授权代码流,它本身不支持或建议使用JS应用程序 . 我不太确定它是什么,但事实是我不能/不应该使用它 .
我明白,因此我必须在我的Web服务器上实现一些身份验证服务器,我的Web API就在那里(可能是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实现似乎有点特殊,这增加了另一层复杂性 .
所以我的问题是:
How can I provide OAuth tokens to the user while authenticating against ADFS ?
如果您需要任何其他信息,我很乐意提供
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(推特: @MrADFS )