您好我已阅读并实施了这些Vittorio Bertocci教程:
"Secure ASP.NET Web API with Windows Azure AD and Microsoft OWIN Components"
"Protecting a Self-Hosted API with Microsoft.Owin.Security.ActiveDirectory"
然而,与教程不同,我的Web应用程序由以下OWIN组件组成:NancyFx& ASP.NET Web API(遵循所提出的架构模式here)当我尝试将AAD身份验证(如Bertocci先生在他的教程中所做的那样)实现到我的NancyFx模块中时(验证遇到需要身份验证的路由的用户) ):
我收到以下错误
其他信息:加载交互式用户身份验证所需的程序集失败。确保程序集' Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'存在。
显然,弹出的要求用户登录的AAD对话框依赖于WindowsForms,不应该从Web应用程序调用。
我应该使用哪种AAD凭证提示? 如何在Web应用程序客户端中实现AAD身份验证?
答案 0 :(得分:5)
我对您尝试实施的方案的理解是您有以下演员:
浏览器 - >网络应用程序 - > Web API
浏览器向Web应用程序验证用户,然后Web应用程序尝试获取一个令牌,允许它代表用户访问Web API上的资源。
在这种情况下,您的Web应用程序需要将浏览器重定向到AAD OAuth 2.0授权终结点。在那里,用户将输入他们的凭证,并使用授权代码重定向回Web应用程序。然后,您可以使用该授权代码通过Active Directory Authentication Library (ADAL)获取令牌。具体来说,您将使用AuthenticationContext.AcquireTokenByAuthorizationCode方法。 Vittorio的以下博客文章提供了有关您需要在Web应用程序中实现的代码的更多详细信息,以获取令牌。它不是OWIN特定的实现,但应该很容易转换为您的NancyFx应用程序。
Using ADAL’s AcquireTokenByAuthorizationCode to Call a Web API From a Web App
您不必更改按"Protecting a Self-Hosted API with Microsoft.Owin.Security.ActiveDirectory"
实现的ASP.NET Web APIProtecting a Hosted API...博客条目中客户端应用示例中使用的AuthenticationContext.AcquireToken版本适用于不涉及浏览器的不同场景。相反,用户正在与桌面应用程序进行交互,然后桌面应用程序代表用户调用Web API。在这种情况下,AcquireToken调用必须显示基于浏览器的对话框,以允许用户登录并获取适当的令牌。