在客户端OWIN Web应用程序中实现Azure Active Directory身份验证

The*_*Cat 2 authentication nancy owin katana azure-active-directory

您好我已阅读并实施了这些Vittorio Bertocci教程:

"使用Windows Azure AD和Microsoft OWIN组件保护ASP.NET Web API"

"使用Microsoft.Owin.Security.ActiveDirectory保护自托管API"

然而,与教程不同,我的Web应用程序由以下OWIN组件组成:NancyFx和ASP.NET Web API(遵循此处所述的体系结构模式)当我尝试将AAD身份验证(如Bertocci先生在其教程中所做的)实现到我的身份时NancyFx模块(用于验证访问需要身份验证的路由的用户):

我收到以下错误

附加信息:加载交互式用户身份验证所需的程序集失败.确保程序集"Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"存在.

显然,弹出的要求用户登录的AAD对话框依赖于WindowsForms,不应该从Web应用程序调用.

我应该使用什么AAD凭证提示?如何在Web应用程序客户端中实现AAD身份验证?

Ric*_*all 5

我对您尝试实现的场景的理解是您有以下actor:

浏览器 - > Web应用程序 - > Web API

浏览器向Web应用程序验证用户的身份,然后Web应用程序尝试获取一个令牌,允许它代表用户访问Web API上的资源.

在这种情况下,您的Web应用程序将需要将浏览器重定向到AAD OAuth 2.0授权端点.在那里,用户将输入他们的凭证,并使用授权代码重定向回Web应用程序.然后,您可以使用该授权代码通过Active Directory身份验证库(ADAL)获取令牌.具体来说,您将使用AuthenticationContext.AcquireTokenByAuthorizationCode方法.Vittorio的以下博客文章提供了有关您需要在Web应用程序中实现的代码的更多详细信息,以获取令牌.它不是OWIN特定的实现,但应该很容易转换为您的NancyFx应用程序.

使用ADAL的AcquireTokenByAuthorizationCode从Web应用程序调用Web API

您不必更改根据"使用Microsoft.Owin.Security.ActiveDirectory保护自托管API"实现的ASP.NET Web API

Protecting a Hosted API ...博客条目中的客户端应用示例中使用的AuthenticationContext.AcquireToken版本适用于不涉及浏览器的不同场景.相反,用户正在与桌面应用程序进行交互,然后桌面应用程序代表用户调用Web API.在这种情况下,AcquireToken调用必须显示基于浏览器的对话框,以允许用户登录并获取适当的令牌.