我在理解與幾個項目一起使用它的概念時遇到了問題。假設我有4個項目在不同的項目中瞭解和使用IPrincipal
- Business.Services
- Presentation.MVC
- Presentation.WebApi
Business.Services是所有的業務邏輯和數據庫連接進行該項目。 MVC,Web API項目引用服務來調用業務邏輯。 MVC和web api沒有任何交互,因爲它們完全是爲了不同的目的在我的情況。 Web Api僅代表處理移動客戶端請求/響應。
在我的MVC項目中,我爲用戶提供了登錄信息,並且在成功登錄後,我創建了FormsAuthenticationTicket
,並且藉助此故障單執行了自定義授權,如果用戶可用於指定的操作。除此之外,我還根據授權中的我的FormsAuthenticationTicket
數據創建IPrincipal。設置後,我可以達到它像HttpContext.Current.User
。
另一方面,在我的Web Api項目中,所有請求都需要基本身份驗證。有一個登錄操作,用戶需要發送LoginName和Password以獲取將用於未來請求的令牌。一旦客戶端檢索到令牌,客戶端會在查詢字符串的末尾添加?token參數。當請求到達Web Api時,它會進入我的CustomAuthorizationAttribute
並再次檢查用戶是否有資格獲得該請求。此外,我將Thread.CurrentPrincipal
和HttpContext.Current.User
設置爲由標記確定的IPrincipal
對象。
這些現在是非常好的。問題從這裏開始。我想把SignalR放到我的Presentation.WebApi項目中。據我所知,OWIN是所有MVC,WebApi的頂層,因此,如果我們已經有一個,我們不需要擁有認證系統。所以第一個問題是:我如何通過這個信號器創建授權?我得到的Context.User(IPrincipal)自然爲空。這似乎確定,因爲在我的web api中,IPrincipal對象是通過CustomAuthorizationAttrbute
中的每個請求設置的。此外,我如何授權來自Presentation.MVC
的用戶?我應該爲mvc用戶提供一種爲他提供令牌的新方法嗎?我可以使用它的FormsAuthenticationTicket數據來授權嗎?
在這種情況下,我必須刪除基本認證才能訪問SignalR權利?因爲WebAPI需要IIS web api上託管的基本身份驗證和信號發送器。問題是我沒有在WebAPI上使用基於cookie的身份驗證,我創建了由Login操作生成的自定義令牌,並使用它來授權web api中的其他方法。問題是我永遠無法獲得任何級別的令牌檢查:S – kkocabiyik