Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “我如何解决?”;“你不会”表演“吗;尝试使用未绑定的LDAP SDK更改scala中的密码时MS AD应答?_Java_Scala_Active Directory_Ldap_Unboundid Ldap Sdk - Fatal编程技术网

Java “我如何解决?”;“你不会”表演“吗;尝试使用未绑定的LDAP SDK更改scala中的密码时MS AD应答?

Java “我如何解决?”;“你不会”表演“吗;尝试使用未绑定的LDAP SDK更改scala中的密码时MS AD应答?,java,scala,active-directory,ldap,unboundid-ldap-sdk,Java,Scala,Active Directory,Ldap,Unboundid Ldap Sdk,我正在与Active Directory搏斗,试图让它允许我更改密码。我已经找到了大量有用的信息,但我仍然得到一个持续的错误 一些代码: import com.unboundid.ldap.sdk._ import com.unboundid.util.ssl._ def main(args: Array[String]) : Unit = { var sslUtil = new SSLUtil( new TrustAllTrustManager() ) var con = new LDA

我正在与Active Directory搏斗,试图让它允许我更改密码。我已经找到了大量有用的信息,但我仍然得到一个持续的错误

一些代码:

import com.unboundid.ldap.sdk._
import com.unboundid.util.ssl._


def main(args: Array[String]) : Unit = {

var sslUtil = new SSLUtil( new TrustAllTrustManager() )
var con = new LDAPConnection(sslUtil.createSSLSocketFactory())
con.connect("ldap.example.net", 636)
con.bind("ldapadmin", "adminpasswd")
val newPass = "Jfi8ZH8#k".getBytes("UTF-16LE");
val modRequest = new ModifyRequest("dn: cn=Tester Dude,ou=Lab,ou=Org,ou=Provider,DC=example,DC=net",
  "changetype: modify",
  "replace: unicodePwd",
  "unicodePwd: " + '"' + newPass + '"')

println("\nGoing to try to set password to " + newPass + " with: " + modRequest.toString())

try {
  con.modify(modRequest)
} catch {
  case lde:LDAPException => println("failed LDAPException: " + lde.toString())
}

}
因此,我将此作为运行时错误:

将尝试将密码设置为[B@6dd1627ewith:ModifyRequest(dn='cn=Tester Dude,ou=Lab,ou=Org,ou=Provider,DC=example,DC=net',mods={REPLACE unicodewd})

失败的LDAPException:LDAPException(结果代码=53(不愿意执行),错误消息='0000001F:SvcErr:DSID-031A11E5,问题5003(将不执行),数据0 ,diagnosticMessage='0000001F:SvcErr:DSID-031A11E5,问题5003(将不执行),数据0 ")

因此,在我所知道的可能导致此错误的因素中:

  • 未通过SSL连接。(这里不是这种情况,我已经检查过是否100%确定我在使用netstat的636端口上)
  • 传递一个违反Active Directory密码策略的密码。(我已经测试了手动设置准确的密码;它将拒绝短/简单密码,但它接受我在此代码中使用的密码)
  • 我试过在密码前后加上或不加引号

    thusfar最有用的信息来源是:

    但我已经用尽了那里(以及许多其他地方)的所有建议

    我还尝试了其他一些方法,包括为手动添加的其他有效用户设置密码(这也是通过sdk添加的)

    其他操作正常。我已删除了不相关的代码,但我可以搜索、打印属性、添加和删除用户,没有问题;但此修改请求失败。如果我将ModifyRequest设置为更改某些其他属性,例如关联的电子邮件,也可以正常工作。

    我的猜测是
    “Unicodewd:+”“'+newPass+'”
    绕过了您的编码(因为
    String
    必须再次转换为字节,我打赌它没有使用正确的编码)

    尝试使用接受
    修改
    对象的MofyRequest版本,然后使用将属性值作为字节的构造函数


    就像在您链接到的博客文章中一样…

    结果表明,它必须经过UTF-16LE编码,然后转换为base64

    val newPass = javax.xml.bind.DatatypeConverter.printBase64Binary(('"'+"Jfi8ZH8#k"+'"').getBytes("UTF-16LE"))
    
    成功了。

    连接不够安全 引自:

    要修改此属性,客户端必须与服务器建立128位安全套接字层(SSL)连接

    因此,即使其他一切看起来都正常,如果连接被认为不安全,您仍然可能会遇到问题5003(不会执行)SvcErr:DSID-03190F4C

    缺乏管理权限 如果您尝试在没有足够权限的情况下执行
    替换
    ,则修改请求可能会失败

    dn: CN=johndoe,OU=Users,DC=example,DC=com
    changetype: modify
    replace: unicodePwd
    unicodePwd:: base64(utf16le(quoted(password)))
    -
    
    在这种情况下,您将得到一个
    SecErr:DSID-03150E47,问题4003(违反访问权限)
    。如果您尝试使用非特权帐户
    绑定
    ,则会发生这种情况

    密码历史记录 一些管理员希望有一个较长的密码历史记录(例如,保存的最后24个密码)。如果您使用的是历史记录中已有的旧密码,则会得到一个
    约束\u ATT\u TYPE

    普通用户
  • 确保连接安全

  • 使用
    删除
    -
    添加
    组合

  • e、 g


    我也偶然发现了这个问题。我正在使用C#的
    Novell.Directory.Ldap.NETStandard
    library。我的问题是需要引用密码。这段代码对我有效:

    var passwordBytes=Encoding.Unicode.GetBytes($“\”{newPassword}\”);
    Modify(userDn,newldapmodify(ldapmodify.Replace,newldapattribute(“unicodePwd”,passwordBytes));
    
    结果是它必须经过UTF-16LE编码,然后转换成base64.val newPass=javax.xml.bind.DatatypeConverter.printBase64Binary(“'”+“Jfi8ZH8”#k“+”)。getBytes(“UTF-16LE”)完成了这项工作。如果可以,将其作为答案发布。
    dn: CN=johndoe,OU=Users,DC=example,DC=com
    changetype: modify
    replace: unicodePwd
    unicodePwd:: base64(utf16le(quoted(password)))
    -
    
    dn: CN=johndoe,OU=Users,DC=example,DC=com
    changetype: modify
    delete: unicodePwd
    unicodePwd:: base64(utf16le(quoted(old password)))
    -
    add: unicodePwd
    unicodePwd:: base64(utf16le(quoted(new password)))
    -