簡體   English   中英

服務層中的授權和用戶信息(.NET應用程序)

[英]Authorization & User info in a Service Layer (.NET application)

我目前正在.NET環境中使用企業應用程序(n-layered),我想知道在BussinessLayer(BL)中管理身份驗證/授權+數據過濾的最佳方法。 我們將使用來自多個接口(ASP.NET應用程序和Web服務)的BL,我認為我的ServiceLayer應該完成這項工作,但我找不到最好的方法。

我想它可能是這樣的:(1)用戶可能使用FormsAuthentication進行身份驗證(ASP.NET Web客戶端)。 (2)ASP .NET代碼(Controller / CodeBehind)實現一個服務來完成一些用戶案例,以某種方式傳遞'用戶'。 (3)服務方法檢查“用戶”是否存在(認證)和他的角色(授權)以驗證他是否可以調用該方法。 如果未經過身份驗證或授權,則拋出異常。 (4)服務使用存儲庫+其他服務+完成工作所需的任何服務。 如果需要某種細粒度過濾(例如,用戶僅對某些項目具有權限),則服務會自動應用它。

我想要的是將ServiceLayer與'web stuff'隔離(不訪問會話...),但是誰知道User調用其方法才能正常運行。 此外,我不知道如何以良好的方式將該工作與ASP .NET身份驗證相匹配......我正在考慮將服務ctor中的“用戶”總結,以便其方法具有所需的“上下文”,可以那工作?...我會感謝一些跡象或現有的代碼片段。

謝謝您的幫助...

首先,身份驗證和授權是兩個獨立的事情。 你的問題意味着你已經知道這一點,但我只是想明確一下。

身份驗證應該在應用程序邊界發生(例如,Web應用程序中的表單身份驗證)。

默認方法是Authentication模塊在成功驗證后設置Thread.CurrentPrincipal

通常, IPrincipal是在.NET中建模用戶上下文的標准基礎。 例如, HttpContext.User是一個IPrincipal。

在您的域模型和數據訪問模塊中,您可以使用Thread.CurrentPrincipal來實現授權邏輯。 這允許您彼此獨立地更改身份驗證和授權。

對我來說,如果你讓客戶層(你的網站/服務)進行身份驗證並讓BL只包含業務邏輯,我認為它既簡單又可擴展。

如果您需要在BL中引用當前用戶,您可以考慮使用“包裝”某些用戶身份信息的接口,這可以從各個UI層傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM