2012-01-05 66 views
11

Tôi đã cố gắng "đọc giữa các dòng" về động lực ban đầu (và/hoặc hiện tại) cho dự án NetSqlAzMan.NetSqlAzMan vs AzMan vs (?????)

Được viết cho?

  1. Bộ điều hợp cho Windows Authorization Manager (AzMan). Trong trường hợp các phương thức trong NetSqlAzMan chỉ chuyển các cuộc gọi đến (Windows Authorization Manager (AzMan)), nhưng có lẽ với các phương pháp đẹp hơn/sạch hơn?

  2. Thay thế cho (Trình quản lý ủy quyền của Windows (AzMan)). Ở đâu (hầu hết hoặc tất cả) các tính năng có sẵn trong (Trình quản lý ủy quyền Windows (AzMan)) được tạo lại trong NetSqlAzMan, nhưng mã được phát triển độc lập. (Có lẽ để cung cấp hỗ trợ DotNet 4.0 ???) (Có lẽ để loại bỏ bất kỳ phụ thuộc COM nào)

  3. Để cung cấp nhiều tính năng hơn (Windows Authorization Manager (AzMan)) được cung cấp. Aka, phiên bản "thông minh hơn"/"tốt hơn" của (Trình quản lý ủy quyền Windows (AzMan)).

  4. Để viết lại mà còn giữ một dự án bán chết thông qua mã nguồn mở. (Như trong, có lẽ (Windows Authorization Manager (AzMan))) là một dự án đã chết hoặc bị bỏ rơi bởi Microsoft).

  5. Khác?

................

Tôi thích mô hình đối tượng của NetSqlAzMan. Nhưng tôi cần phải bảo vệ bất kỳ quyết định nào để sử dụng nó cho người quản lý dự án của tôi (s) và các nhà phát triển khác. Mô hình đối tượng có vẻ "vừa phải" (nghĩ rằng goldilocks và giường giữa) theo như những gì tôi mong muốn được bảo mật. Tôi KHÔNG muốn thực hiện bảo mật dựa trên vai trò. Tôi muốn quyền (hoặc nhiệm vụ hoặc sự cho phép) dựa trên an ninh.

(Xem: http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/http://granadacoder.wordpress.com/2010/12/01/rant-hard-coded-security-roles/ )

Và về cơ bản câu hỏi đó đã đưa ra là: "lợi thế của việc sử dụng NetSqlAzMan thay vì là gì (Windows Authorization Manager (AzMan))"

Và câu hỏi phụ là "Trình quản lý ủy quyền Windows (AzMan) có chết không?". (Và một cái gì đó dọc theo dòng Long Live NetSqlAzMan!).

..................

My trong chung yêu cầu là:

Người dùng không Active Directory. (Down the road Active Directory và/hoặc hỗ trợ LDAP sẽ được tốt đẹp, nhưng không phải là một yêu cầu). Mật khẩu không được lưu dưới dạng văn bản thuần túy. Có thể xử lý QUYỀN để kiểm tra bảo mật.
Nhóm các quyền theo bất kỳ vai trò nào. Gán vai trò cho người dùng. (Nhưng một lần nữa, mã sẽ kiểm tra bên phải, không phải vai trò khi thực hiện một hành động.) Cho phép (nhân dịp) quyền được gán cho người dùng. Với ghi đè từ chối. (Aka, một người dùng duy nhất làm điều ngu ngốc (như "Xóa nhân viên") có thể bị thu hồi quyền.) Vai trò và quyền có thể được duy trì cho nhiều ứng dụng.

Vì vậy, các ý tưởng khác được hoan nghênh.Nhưng Windows Identity Foundation có vẻ hơi quá mức.

Cảm ơn.

Trả lời

10

Cuối cùng tôi đã tìm thấy bài viết "so sánh" tối qua.

http://www.c-sharpcorner.com/uploadfile/a.ferendeles/netsqlazman12122006123316pm/netsqlazman.aspx

Tôi sẽ dán phần có liên quan ở đây (bên dưới). (Chỉ trong trường hợp trang web chấm dứt tồn tại trong tương lai. Cơ hội nhỏ, tôi biết, nhưng tôi ghét liên kết "Câu trả lời là ở đây" và khi bạn nhấn vào liên kết, đó là liên kết đã chết.)

Từ những gì Tôi có thể kể.

NetSqlAzMan cung cấp hàm (do người dùng xác định-chức năng) mà bạn có thể quá tải để cung cấp danh sách người dùng (được gán cho vai trò/nhiệm vụ). NetSqlAzMan không chỉ cung cấp ánh xạ "Vâng bạn có thể" (Grant), mà còn cung cấp cả Deny và Grant-With-Delegate. NetSqlAzMan và Azman cho phép người dùng (nhóm) ánh xạ vai trò. Chỉ NetSqlAzMan cho phép người dùng ánh xạ nhiệm vụ.

Sau khi xem xét một vài mẫu ... mô hình đối tượng của NetSqlAzMan rất sạch sẽ.

============================================== =========

Ms Authorization Manager (AzMan) vs NET Sql Authorization Manager (NetSqlAzMan)

Như đã chỉ ra trước đó, một sản phẩm của Microsoft tương tự đã tồn tại và được gọi là Authorization Manager (AzMan); AzMan hiện diện, theo mặc định, trong Windows Server 2003 và, thông qua thiết lập Gói quản trị, trong Windows XP.

Sự khác biệt quan trọng giữa AzMan và NetSqlAzMan là đầu tiên là dựa trên vai trò, đó là, dựa trên thuộc - Vai trò khái niệm và container hoạt động trong mỗi vai trò, trong khi thứ hai là dựa trên item (hoặc nếu bạn thích dựa trên hoạt động), đó là người dùng hoặc người dùng nhóm hoặc nhóm các nhóm có thể hoặc không thể thuộc về vai trò hoặc thực hiện nhiệm vụ và/hoặc hoạt động đó (mục).

Đây là tính năng quan trọng nhất và khác biệt giữa hai sản phẩm :

Ms AzMan:

* It's COM. 
* It's equipped by a MMC 2.0 (COM) console. 
* Its storage can be an XML file or ADAM (Active Directory Application Mode - e un LDAP). 
* It's role-based. 
* It supports static/dynamic applicative groups, members/not-members. 
* Structure based on Roles -> Tasks -> Operations. (Hierarchical Roles and Tasks , none Operations). 
* Authorizations can be added only to Roles. 
* It doesn't implement the "delegate" concept. 
* It doesn't manage authorizations "in the time". 
* It doesn't trigger events. 
* The only type of authorization is "Allow". 
    (to "deny" it needs to remove the user/group from his Role). 
* It supports Scripting/Biz rules. 
* It supports Active Directory users/groups and ADAM users. 

NetSqlAzMan:

* It's .NET 2.0. 
* It's equipped by a MMC 3.0 (.NET) console. 
* Its storage is a Sql Server database(2000/MSDE/2005/Express). 
* It's based on Tdo - Typed Data Object technology. 
* It's Item-based. 
* Structure based on Roles -> Tasks -> Operations. (all hierarchical ones). 
* Authorizations can be added to Roles, Task and Operations. 
* It supports static/dynamic applicative groups, members/not-members. 
* LDAP query testing directly from console. 
* It's time-dependant. 
* It's delegate-compliant. 
* It triggers events (ENS). 
* It supports 4 authorization types: 
     o Allow with delegation (authorized and authorized to delegate). 
     o Allow (authorized). 
     o Deny (not authorized). 
     o Neutral (neutral permission, it depends on higher level Item permission). 
* Hierarchical authorizations. 
* It supports Scripting/Biz rules (compiled in .NET - C# - VB - and not interpreted) 
* It supports Active Directory users/groups and custom users defined in SQL Server Database. 

Dưới đây là Gotcha khác.

Azman mẫu mã: http://channel9.msdn.com/forums/sandbox/252978-AzMan-in-the-Enterprise-Sample-Code http://channel9.msdn.com/forums/sandbox/252973-Programming-AzMan-Sample-Code

using System; 
using System.Security.Principal; 
using System.Runtime.InteropServices; 
using AZROLESLib; 

namespace TreyResearch { 
    public class AzManHelper : IDisposable { 

     AzAuthorizationStore store; 
     IAzApplication app; 
     string appName; 

     public AzManHelper(string connectionString, string appName) { 

      this.appName = appName; 

      try { 
       // load and initialize the AzMan runtime 
       store = new AzAuthorizationStore(); 
       store.Initialize(0, connectionString, null); 

       // drill down to our application 
       app = store.OpenApplication(appName, null); 
      } 
      catch (COMException x) { 
       throw new AzManException("Failed to initizlize AzManHelper", x); 
      } 
      catch (System.IO.FileNotFoundException x) { 
       throw new AzManException(string.Format("Failed to load AzMan policy from {0} - make sure your connection string is correct.", connectionString), x); 
      } 
     } 

     public void Dispose() { 
      if (null == app) return; 

      Marshal.ReleaseComObject(app); 
      Marshal.ReleaseComObject(store); 

      app = null; 
      store = null; 
     } 

     public bool AccessCheck(string audit, Operations op, 
           WindowsIdentity clientIdentity) { 

      try { 
       // first step is to create an AzMan context for the client 
       // this looks at the security identifiers (SIDs) in the user's 
       // access token and maps them onto AzMan roles, tasks, and operations 
       IAzClientContext ctx = app.InitializeClientContextFromToken(
        (ulong)clientIdentity.Token.ToInt64(), null); 

       // next step is to see if this user is authorized for 
       // the requested operation. Note that AccessCheck allows 
       // you to check multiple operations at once if you desire 
       object[] scopes = { "" }; 
       object[] operations = { (int)op }; 
       object[] results = (object[])ctx.AccessCheck(audit, scopes, operations, 
                  null, null, null, null, null); 
       int result = (int)results[0]; 
       return 0 == result; 
      } 
      catch (COMException x) { 
       throw new AzManException("AccessCheck failed", x); 
      } 
     } 

     public bool AccessCheckWithArg(string audit, Operations op, 
             WindowsIdentity clientIdentity, 
             string argName, object argValue) { 

      try { 
       // first step is to create an AzMan context for the client 
       // this looks at the security identifiers (SIDs) in the user's 
       // access token and maps them onto AzMan roles, tasks, and operations 
       IAzClientContext ctx = app.InitializeClientContextFromToken(
        (ulong)clientIdentity.Token.ToInt64(), null); 

       // next step is to see if this user is authorized for 
       // the requested operation. Note that AccessCheck allows 
       // you to check multiple operations at once if you desire 
       object[] scopes = { "" }; 
       object[] operations = { (int)op }; 
       object[] argNames = { argName }; 
       object[] argValues = { argValue }; 
       object[] results = (object[])ctx.AccessCheck(audit, scopes, operations, 
                  argNames, argValues, 
                  null, null, null); 
       int result = (int)results[0]; 
       return 0 == result; 
      } 
      catch (COMException x) { 
       throw new AzManException("AccessCheckWithArg failed", x); 
      } 
     } 

     // use this to update a running app 
     // after you change the AzMan policy 
     public void UpdateCache() { 
      try { 
       store.UpdateCache(null); 
       Marshal.ReleaseComObject(app); 
       app = store.OpenApplication(appName, null); 
      } 
      catch (COMException x) { 
       throw new AzManException("UpdateCache failed", x); 
      } 
     } 
    } 

    public class AzManException : Exception { 
     public AzManException(string message, Exception innerException) 
      : base(message, innerException) 
     {} 
    } 
} 

Đó là Azman mã giúp đỡ. Đó là công cụ COM/Interopish xấu xí.: <

Bây giờ kiểm tra mẫu mã NetSqlAzMan:

http://netsqlazman.codeplex.com/wikipage?title=Samples

/// <summary> 
/// Create a Full Storage through .NET code 
/// </summary> 
private void CreateFullStorage() 
{ 
    // USER MUST BE A MEMBER OF SQL DATABASE ROLE: NetSqlAzMan_Administrators 

    //Sql Storage connection string 
    string sqlConnectionString = "data source=(local);initial catalog=NetSqlAzManStorage;user id=netsqlazmanuser;password=password"; 
    //Create an instance of SqlAzManStorage class 
    IAzManStorage storage = new SqlAzManStorage(sqlConnectionString); 
    //Open Storage Connection 
    storage.OpenConnection(); 
    //Begin a new Transaction 
    storage.BeginTransaction(AzManIsolationLevel.ReadUncommitted); 
    //Create a new Store 
    IAzManStore newStore = storage.CreateStore("My Store", "Store description"); 
    //Create a new Basic StoreGroup 
    IAzManStoreGroup newStoreGroup = newStore.CreateStoreGroup(SqlAzManSID.NewSqlAzManSid(), "My Store Group", "Store Group Description", String.Empty, GroupType.Basic); 
    //Retrieve current user SID 
    IAzManSid mySid = new SqlAzManSID(WindowsIdentity.GetCurrent().User); 
    //Add myself as sid of "My Store Group" 
    IAzManStoreGroupMember storeGroupMember = newStoreGroup.CreateStoreGroupMember(mySid, WhereDefined.Local, true); 
    //Create a new Application 
    IAzManApplication newApp = newStore.CreateApplication("New Application", "Application description"); 
    //Create a new Role 
    IAzManItem newRole = newApp.CreateItem("New Role", "Role description", ItemType.Role); 
    //Create a new Task 
    IAzManItem newTask = newApp.CreateItem("New Task", "Task description", ItemType.Task); 
    //Create a new Operation 
    IAzManItem newOp = newApp.CreateItem("New Operation", "Operation description", ItemType.Operation); 
    //Add "New Operation" as a sid of "New Task" 
    newTask.AddMember(newOp); 
    //Add "New Task" as a sid of "New Role" 
    newRole.AddMember(newTask); 
    //Create an authorization for myself on "New Role" 
    IAzManAuthorization auth = newRole.CreateAuthorization(mySid, WhereDefined.Local, mySid, WhereDefined.Local, AuthorizationType.AllowWithDelegation, null, null); 
    //Create a custom attribute 
    IAzManAttribute<IAzManAuthorization> attr = auth.CreateAttribute("New Key", "New Value"); 
    //Create an authorization for DB User "Andrea" on "New Role" 
    IAzManAuthorization auth2 = newRole.CreateAuthorization(mySid, WhereDefined.Local, storage.GetDBUser("Andrea").CustomSid, WhereDefined.Local, AuthorizationType.AllowWithDelegation, null, null); 
    //Commit transaction 
    storage.CommitTransaction(); 
    //Close connection 
    storage.CloseConnection(); 
} 

Đó kể một câu chuyện trong và của chính nó.

+0

Tôi chỉ muốn chỉ ra rằng các bài viết và các điểm thực hiện về AzMan là từ một bài báo đăng tải trong năm 2006. Azman đã được cập nhật và cải tiến (escpecially sự hỗ trợ API và SQL Server Store) khi Windows Server 2008 bước ra. Nhưng có vẻ như Azman đã bị bỏ rơi. Bản cập nhật blog của Azman Team mới nhất là từ năm 2008. – Haydar

+0

Cảm ơn bạn đã có mẹo. Không được tải lên trên Azman, nhưng thực tế nó được gắn với các phiên bản O/S cụ thể ...... đó là một điểm rắc rối với tôi. Nhưng nó có thể là một trong những thứ đó là nguồn cảm hứng cho một số thứ tốt hơn .... – granadaCoder

+0

Là NETSQL Azman phụ thuộc vào Windows Azman theo bất kỳ cách nào. Kể từ khi Azman có thể không được chấp nhận trong các phiên bản Windows trong tương lai, điều đó có nghĩa là NETSQL Azman sẽ không hoạt động khi điều đó xảy ra? – Donny

2

Tôi nghĩ lý do cho việc thiếu thông tin cập nhật từ Microsoft trên blog của họ và trong SDK của họ có gì để làm với họ đã di chuyển tất cả các công cụ của họ và thiết kế hướng tới một mạng xã hội/liên bang thân thiện "tuyên bố mô hình":

http://msdn.microsoft.com/en-us/magazine/ee335707.aspx

So với bất kỳ biến thể AzMan nào, ở mức hoạt động AzMan thấp (mã yêu cầu tách rời phần còn lại), chúng tôi chỉ có quyền xác nhận quyền. Kiểu hoạt động mới này chỉ đơn giản là một chuỗi URN/tên hành động được phát hành từ bất kỳ nhà cung cấp/dịch vụ xác nhận quyền sở hữu đáng tin cậy nào được xác thực bằng chữ ký bạn (hoặc cấu hình lại sau) xác định. Sau đó, họ chỉ là một danh sách phẳng vai trò trong danh tính người dùng dễ dàng kiểm tra với các phương pháp IsInRole phổ biến.

Lý do cho điều này là rõ ràng. Các giải pháp internet hiện đại (và có lẽ một số ứng dụng mạng nội bộ của công ty trong tương lai sau khi luật bảo mật được cải thiện) yêu cầu ủy quyền và xác thực đa miền, ví dụ: tài khoản người dùng StackOverflow.com này và tài khoản Facebook được kết nối hoặc bất kỳ tài khoản OpenID nào mà bạn có thể đã liên kết.

Vì vậy, để được ủy quyền, giờ đây bạn có thể quy tắc CODE ánh xạ giữa các xác nhận quyền sở hữu bên ngoài và "xác nhận quyền sở hữu" bên trong (tương tự như hoạt động của AzMan). Tuy nhiên không có công cụ quản trị, phân cấp hoặc định dạng chuẩn.

Có lẽ giải pháp hỗn hợp Dịch vụ xác nhận quyền sở hữu (Xác thực) + XML/SQL của AzMan (Vai trò đối với ánh xạ xác nhận quyền sở hữu) + Yêu cầu Quyền yêu cầu là cách thức chuyển tiếp. Tất cả các mẫu tôi tìm thấy cho đến nay chỉ có mã ở giữa. Tôi muốn thấy điều gì đó với các thành viên nhóm đệ quy từ Active Directory đã giải quyết các vai trò cho các nhiệm vụ đối với các yêu cầu (hoạt động) như chúng ta đã có với AzMan.

More tra là cần thiết để đạt được "tốt cũ" nhưng vẫn rất cần thiết "vai trò bảo mật dựa trên" mô hình với công nghệ mới ...

Nếu bạn đang tìm kiếm để bắt đầu, đầu hướng về Microsoft Windows nhận dạng Foundation (WIF) lần đầu tiên xuất hiện trong .NET 3.5.1 nhưng đã được tích hợp vào khung công tác .NET 4.5.

http://msdn.microsoft.com/en-us/library/hh377151(v=vs.110).aspx

+0

Đối với người đọc trong tương lai .... Tôi đã từ bỏ hoàn toàn "trường học cũ" và hiện đang sử dụng ủy quyền yêu cầu. Đó là một bướu nhỏ để vượt qua, nhưng cuối cùng nó vẫn hoạt động. – granadaCoder

Các vấn đề liên quan