2

您好,我已经阅读并实施了这些 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 身份验证?

4

1 回答 1

5

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

浏览器 -> 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

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

于 2014-01-10T01:26:31.643 回答