由於你沒有提到這兩個數據庫是什麼,我假設它們不是用戶數據庫,並且脫離了上下文。專注於用戶身份存儲,是的,除非你使用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應用程序設置開放標識配置,但無論如何都可以在帶示例代碼的文檔中找到。
該文檔很容易遵循,服務器易於安裝。它消除了應用程序和服務中的所有複雜性,因此您可以專注於您希望應用程序執行的操作,而不用擔心在每個應用程序或服務中處理身份驗證和授權。
谷歌爲自定義身份(這真的是你使用的)使用SQL Server的設置,你可能會理解你如何做你想做的事情 –
@cFrozenDeath自定義ASP.NET身份?它是一個定製存儲提供商嗎?身份是OWIN還是ASP.NET? – SmashCode
身份是在OWIN中間件上運行的成員資格提供者(授權/認證)。身份可以配置到您選擇的存儲提供程序(SQL Server,MySQL等等)。 OWIN和ASP.NET一樣。強烈建議您查看一些基本的OWIN教程/文檔 –