2014-01-06 72 views
2

你好,我已經閱讀並實施這些維托裏奧Bertocci教程:在客戶端OWIN的Web應用程序中實現Azure的Active Directory驗證

"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身份驗證?

回答

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"

是在客戶端應用程序示例中使用的Protecting a Hosted API...博客條目AuthenticationContext.AcquireToken的版本中實現您的ASP.NET Web API是旨在用於不涉及瀏覽器的不同場景。相反,用戶正在與桌面應用程序進行交互,然後桌面應用程序代表用戶調用Web API。在這種情況下,AcquireToken調用必須顯示基於瀏覽器的對話框,以允許用戶登錄並獲取適當的令牌。

相關問題