首页 文章

UserPrincipal与使用SSL的上下文

提问于
浏览
0

我有一个使用SSL的PrincipalContext . 使用Context.ValidateCredentials()等方法时,此方法可以正常工作 . 但是当我需要使用UserPrincipal.FindByIdentity()找到用户时,我收到以下错误:

System.Runtime.InteropServices.COMException:服务器不愿意处理请求 . 在System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)位于System.DirectoryServices.DirectoryEntry.Bind()的System.DirectoryServices.DirectoryEntry.get_SchemaEntry()处于System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainer(DirectoryEntry de)的System.DirectoryServices上.AccountManagement.ADStoreCtx..ctor(DirectoryEntry ctxBase,Boolean ownCtxBase,String username,String password,ContextOptions选项)位于System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()的System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntry条目)中 - - 内部异常堆栈跟踪结束--- System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()位于系统的System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()处的System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()处 . Sy的DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()在System的System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context,Type principalType,String identityValue)中的stem.DirectoryServices.AccountManagement.Principal.FindBdentIdentityWithTypeHelper(PrincipalContext context,Type principalType,Nullable`1 identityType,String identityValue,DateTime refDate) . DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context,String identityValue)

我的方法:

public List<string> GetUserInfo(string user) {
        var list = new List<string>();

        using (var context = new PrincipalContext(ContextType.Domain, "xxxx.xxxx.xxxx:636", "DC=xxxx,DC=xxxx,DC=xxxx", ContextOptions.SimpleBind | ContextOptions.Sealing | ContextOptions.SecureSocketLayer)) {
            var uP = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, user);

            //Do stuff with uP
        return list;
    }

但这很好用:

public bool ValidateCredentials(string username, string password) {
        using (var context = new PrincipalContext(ContextType.Domain, "xxxx.xxxx.xxxx:636", "DC=xxxx,DC=xxxx,DC=xxxx", ContextOptions.SimpleBind | ContextOptions.Sealing | ContextOptions.SecureSocketLayer)) {
            return context.ValidateCredentials(username, password);
        }
    }

为什么我不能使用Context with SSL来使用UserPrincipal?如果我删除SSL它工作正常..

1 回答

  • 1

    我将ContextOptions更改为Negotiate和SSL . 然后它奏效了

相关问题