私は管理者アカウントを持っていません。 Active Directoryの自分(ユーザー)のパスワードをjavaから変更したいです。 どうすればいいですか?ウェブからのコードを使用してLDAPからActive Directoryのパスワードを変更することはできますか(管理者アカウントなし)
:
LDAP: error code 32 - 0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), data 0, best match of:
'CN=Users,DC=company,DC=com'
私はuserDnはを変更した場合に、 "CN =スミス" 私が得た:ここ
private void changePass() throws Exception {
String oldpass = this.encodePassword("oldpass!");
String newpass = this.encodePassword("newpass!");
Attribute oldattr = new BasicAttribute("unicodePwd", oldpass);
Attribute newattr = new BasicAttribute("unicodePwd", newpass);
ModificationItem olditem = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, oldattr);
ModificationItem newitem = new ModificationItem(DirContext.ADD_ATTRIBUTE, newattr);
ModificationItem repitem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, newattr);
ModificationItem[] mods = new ModificationItem[2];
mods[0] = olditem;
mods[1] = newitem;
// ldapTemplate.modifyAttributes("cn=administrator,cn=Users", mods);
ldapTemplate.modifyAttributes("cn=smith,cn=Users", new ModificationItem[] { repitem });
}
は、私が得たcontextSource
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="ldap://ldapserver:389"/>
<property name="base" value="dc=company,dc=com"/>
<property name="userDn" value="[email protected]"/>
<property name="password" value="oldpass"/>
</bean>
次のとおりです。
LdapErr:DSID-0C0903A9、コメント:AcceptSecurityContextエラー
たぶん、私の問題は、私はLDAPが動作しているか理解していないということですか?それは可能ですか(ユーザーアカウントを使用してユーザーパスワードを変更するかどうか) 可能であれば、同じ特権でロックされた/期限切れのアカウントをチェックできますか?
UPDATE/RESOLVE
あなたの助けのために非常にマッチに感謝。それは私にとっても非常に役立った。将来サーチャーのための
:
NO_OBJECT - "Active Directoryは、ユーザー属性を使用することができるユーザー・カタログへの完全修飾正規のパスを見つけるには、オブジェクト(私のCN =ユーザ、CN =スミス) を見つけることができないことを意味しdistinguishedNameの "(CN =ジョン\、スミスそれは私の、worstest場合" "OU =業者、OU =ユーザーアカウント、OU =アカウント")
は、私が得た:
WILL_NOT_PERFORM - これはさまざまなタイプのものを意味する可能性があります。私の場合、間違ったオブジェクトタイプがありましたが、SSL接続(ではなく、ldaps://)などではなく、以下に説明するように、他の場合が考えられます。その後、
:
INSUFF_ACCESS_RIGHTS - ユーザー(管理者ではなく、属性、パスワードREPLACEする権利を持っていない)、彼は古いパスワードと新しいパスワードを入力し、[古い削除し、新しいを追加する必要があり、パスワードを変更します。問題1005
Attribute oldattr = new BasicAttribute("unicodePwd", oldQuotedPassword.getBytes("UTF-16LE"));
Attribute newattr = new BasicAttribute("unicodePwd", newQuotedPassword.getBytes("UTF-16LE"));
ModificationItem olditem = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, oldattr);
ModificationItem newitem = new ModificationItem(DirContext.ADD_ATTRIBUTE, newattr);
ldapTemplate.modifyAttributes("cn=John\\, Smith,ou=Contractors,ou=User Accounts,ou=Accounts", new ModificationItem[] { olditem, newitem });
(CONSTRAINT_ATT_TYPE) - 場合は、古いパスワードが間違っ
ところで
javax.naming.PartialResultException:未処理の継続リファレンス(S); 残りの名前 '/' - 人/ユーザーグローバルを検索するとき(例えば、authenticate-methodで) ldapTemplate。setIgnorePartialResultException(true);
は私がのgetContext()にコードを固定し、どうもありがとうのmodifyAttributes( "CN = Usersの"、新modifyAttributes()では、ModificationItem [] {新しいmodifyAttributes()では、ModificationItem(DirContext.REPLACE_ATTRIBUTE、新しいBasicAttributeに( "のunicodePwd "、encodePassword(" mamakassa22! ")。getBytes(" UTF-16LE "))))));とcn = Users、そして今私はSvcErr:DSID-03190C6B、問題5003(WILL_NOT_PERFORM)、データ0を取得しました。問題はSSL接続ではないでしょうか? – xtern
@JohnSmith私はWILL_NOT_PERFORMはこれまで以上にセキュリティが求められていると考えています。 APIを持っている場合は、この属性変更だけでなく、拡張パスワード変更操作を使用することも検討する必要があります。 – EJP
パスワード属性を変更するときに管理者以外のユーザーを認証する場合は、削除/追加が必要です。その場合、単純なREPLACE_ATTRIBUTEはありません。 – Johanneke