Tôi gặp sự cố khi sử dụng phương thức GetAuthorizationGroups của lớp UserPrincipal trong ứng dụng web.Lỗi với phương pháp UserPrincipal.GetAuthorizationGroups()
Sử dụng đoạn mã sau, tôi nhận được "Trong khi cố gắng để lấy các nhóm ủy quyền, một lỗi (5) xảy ra"
PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM", "username", "password");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();
Tôi tin rằng mã này làm việc đến một mức độ nào đó.
- Khi tôi xem các đối tượng bối cảnh, tôi có thể nhìn thấy các máy chủ và tên người dùng/mật khẩu đã được giải quyết một cách chính xác trong đối tượng
- Khi tôi xem các đối tượng p, tôi có thể xem chi tiết AD đã được dân cư như điện thoại không v.v.
Đây là dấu vết ngăn xếp từ lỗi.
[PrincipalOperationException: While trying to retrieve the authorization groups, an error (5) occurred.]
System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte[] userSid, NetCred credentials, ContextOptions contextOptions, String flatUserAuthority, StoreCtx userStoreCtx, Object userCtxBase) +317279
System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p) +441
System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper() +78
System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups() +11
Bằng cách loại bỏ tên người dùng và mật khẩu chi tiết từ các nhà xây dựng PrincipalContext và thay đổi applicationpool (trong IIS7) để chạy như cùng một người dùng ([email protected]) - đoạn mã sau hoạt động.
PrincipalContext context = new PrincipalContext(ContextType.Domain, null, "DC=MyCompany,DC=COM");
UserPrincipal p = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "joe.blogs");
var groups = p.GetAuthorizationGroups();
Tôi cần lấy mã trong ví dụ đầu tiên để làm việc - Tôi không muốn chạy nhóm ứng dụng dưới dạng người dùng miền chỉ để làm cho mã này hoạt động.
Cảm ơn Rob, tôi đã thử nhiều kết hợp trong hàm dựng PrincipalContext không may mắn. Tôi nghĩ nguyên nhân gốc rễ của vấn đề của tôi là biết các yêu cầu quyền của người dùng ứng dụng để gọi phương thức GetAuthorizationGroups(). Người dùng ứng dụng của tôi đã đọc tất cả các quyền thông tin đối với các đối tượng trong OU. Hiện tại tôi đang làm điều này một cách dài bằng cách đọc thuộc tính memberOf của người dùng. Đây chỉ là cấp độ đầu tiên và không đệ quy. –
FWIW, tôi đã có một phiên bản làm việc, nơi tôi đã sử dụng 'var Context = new PrincipalContext (ContextType).Tên miền, "logon_domain"); ', do đó, bối cảnh hoàn toàn là một tên miền và cũng làm việc mà không có lỗi trong Win7/hồ bơi ứng dụng mặc định. Máy bạn đang chạy mã trên miền đã tham gia phải không? – Rob
Có, đã tham gia vào một miền. nếu tôi sử dụng constructorContipalContext (ContextType.Domain, "logon_domain") với dịch vụ mạng (AppPool) nó không hoạt động. Nếu tôi thay đổi AppPool để chạy như cùng một người dùng như được sử dụng trong phương pháp PrincipalContext (ContextType.Domain, null, "DC = MyCompany, DC = COM", "tên người dùng", "mật khẩu") nó hoạt động! –