2016-06-09 227 views
1

我正在與其他人一起使用MVC(5我認爲)和WebApi2.0構建Visual Studio Web項目的解決方案。在MVC Web應用程序中抽象出OWIN身份驗證

解決方案的本質是它有2個DAL,其中一個DAL使用SQL訪問另一個應用程序數據庫,另一個DAL使用entityframework codefirst來管理我們的應用程序數據庫。還有一個與項目相關的服務,所以我們已經盡全力將整個解決方案調整爲3層模式。這意味着有一個包含我們的BusinessLogic的項目,我們的服務和我們的控制器都使用它來訪問DAL。

因此,所有這一切...我們現在在網絡端添加身份驗證。我們一直堅持了幾天,直到我們真正採用OWIN認證接受了微軟的默認項目結構。缺點是我們現在有一個單獨的用戶數據庫,它基本上與解決方案的Presentation/Web層相結合。

是否有任何方法可以保留MVC項目中所有默認OWIN認證的便利,並將其抽象到LogicLayer中?我不能發佈我們曾經工作過的東西,但不用說每次都失敗了,因爲我們真的很難確定幕後做了些什麼(一個例子是[彙編:OwinStartupAttribute(typeof(AlarmAggregator)。啓動))]註釋)。僅憑這個註釋使我認爲我們將無法將其抽象出來。 我知道我要求吃我的蛋糕並且也吃,但我希望有人有一些洞察力,如果有可能的話。

至少我們希望有一種方法可以將我們的內部數據庫和我們的用戶數據庫結合起來?我認爲這必須在上下文級別發生?它會像在我們的內部環境中指向web.config一樣簡單嗎?

+1

谷歌爲自定義身份(這真的是你使用的)使用SQL Server的設置,你可能會理解你如何做你想做的事情 –

+0

@cFrozenDeath自定義ASP.NET身份?它是一個定製存儲提供商嗎?身份是OWIN還是ASP.NET? – SmashCode

+1

身份是在OWIN中間件上運行的成員資格提供者(授權/認證)。身份可以配置到您選擇的存儲提供程序(SQL Server,MySQL等等)。 OWIN和ASP.NET一樣。強烈建議您查看一些基本的OWIN教程/文檔 –

回答

1

由於你沒有提到這兩個數據庫是什麼,我假設它們不是用戶數據庫,並且脫離了上下文。專注於用戶身份存儲,是的,除非你使用ADFS,LDAP或其他東西,否則它將成爲一個獨立的實體。我會阻止你構建你自己的身份解決方案,而是尋找更廣泛使用和接受的東西,因爲它是一個安全主題。

看一看Thinktecture Identity Server。它是一個基於OpenId Connect的開源解決方案。它具有自己的數據庫,支持相同的域SSO,基於cookie的認證並支持開放式ID連接。如果要連接ADFS,它還支持聯合身份驗證。它也可以做社會符號整合。

我已將.NET,Java和PHP解決方案集成到同一實例的生產環境中,一切都非常棒,無縫。

您可以將其作爲單獨的服務託管。您可以註冊已知的客戶端(您的應用程序和服務),其傳入和重定向的URL,包括郵件註銷URL,這樣您的應用程序就可以無縫連接並從身份服務器返回。 Identity Server隨附您需要保護您的API和Web應用程序的所有中間件。它還提供REST端點以獲取和驗證訪問令牌等。

您還可以設置不同的作用域來指定可以處理請求的作用域。

我說的大部分內容都與oAuth 2.0規範直接相關,所以如果你不知道它,可能你可以閱讀一些關於它的文章here

使用典型的oAuth Flow(例如,g隱式流或授權代碼流),在Owin流水線中連接正確的中間件,並使用[Authorize]屬性裝飾您的API資源,您的應用程序將重定向到用戶可以登錄的身份服務器頁面。您的API(受保護的資源)可以指定他們是否期待特定範圍,何時呈現令牌並允許基於此接受/拒絕您的請求。

客戶端註冊確保只有身份服務器接受已知客戶端(因爲應用程序通常面向互聯網),您可以使用MembershipReboot組件(也可以使用Thinktecture(也稱爲開源))作爲身份存儲或編寫自己的實現的「用戶服務」。可用的擴展點太多,您可以實際定製所有內容,包括身份服務器頁面的外觀和感覺以匹配客戶端應用程序的UI方案。有IUserService(插入自己的用戶存儲,ViewLoader自定義用戶界面,CORS策略服務指定每個客戶端允許的來源,基於證書的TokenSigningService簽署令牌(訪問/刷新令牌),ScopeStore,ClientStore,TokenHandleStore(用於存儲範圍,客戶端配置,令牌),ClaimsFilters過濾發佈令牌時包含哪些聲明,當您使用可能返回更多需要存儲或提供的信息的外部提供商時,此功能很有用)

我可以繼續這裏但就像我說的可用的東西,我用它在生產中的多個應用程序,你可以試試。

您可以在本地計算機上啓動並運行30分鐘的Identity Server和MembershipReboot數據庫設置。作者的支持非常好,這是用戶認證和授權非常廣泛接受的解決方案。

例如,確保一個的WebAPI是超級簡單: 1.根據您的需要 2.本通知API去檢查,如果你在owin得到的東西設置了授權與[Authorize]和或[ScopeAuthorize]裝飾你的API管道。 3.在Owin啓動只需使用:

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions() 
      { 
       Authority = "http://your-idserver-url" 
      }); 

是的,這是你在你的WebAPI需要的所有變化。有一種單獨的方法可以爲基於MVC的Web應用程序設置開放標識配置,但無論如何都可以在帶示例代碼的文檔中找到。

該文檔很容易遵循,服務器易於安裝。它消除了應用程序和服務中的所有複雜性,因此您可以專注於您希望應用程序執行的操作,而不用擔心在每個應用程序或服務中處理身份驗證和授權。

相關問題