次の条件でJIRA 4.1とActive Directoryを統合するタスクを取得しました。
- ユーザーとグループの同期(バージョン4.1は同期をサポートしていません)
- 透過認証(JIRAはログインとして電子メールアドレスを使用します)
- ユーザープロパティの入力(電話番号)
- ADに含まれていないユーザーはマークする必要があります
そして、これは私がそれを解決した方法です:
このトピックは、ハブロフスク市民
XoJIoDのリクエストに基づいて公開されました。そのため、プラスもあります。
JIRAセットアップ
JIRA 4.1にはLDAPと統合するための既製のメカニズムがありますが、できることはパスワードチェックのみです。 同期の話はありません。 このステップをスキップできます 将来的には、SPNEGOパスワードの検証を委託します。
そのため、管理者アカウントでJIRAに移動し、管理→システム→LDAPセクションに移動してフォームに入力します。

ここで:
- LDAPホスト -LDAPサーバーのアドレスとポート
- BaseDN-ユーザーを検索するルートDN
- バインドDN -LDAPサーバーへの接続に使用されるユーザーDN
- バインドパスワード -接続に使用されるユーザーパスワード
- 検索属性 -ユーザーのログインを含む属性(私の場合、これはメールアドレスです)
- 認証するサンプルユーザー -接続の確認に使用されるユーザーログイン
- サンプルユーザーのパスワード -接続を確認するためのユーザーパスワード
PartialResultExceptionエラーメッセージを受け取った場合は、グローバルカタログポート(3268)を使用してみてください。 すべてが正しく入力されると、
LDAP認証成功メッセージが表示され、以下に統合用のXMLファイルの内容が表示されます。 それをコピーし、JIRAサーバーを停止して、ファイル
$ JIRA_HOME / atlassian-jira / WEB-INF / classes / osuser.xmlにあった内容をこのコンテンツに置き換えます。 この機会を利用して、Jellyスクリプトの実行も有効にしますこれを行うには、
$ JIRA_HOME / bin / setenv.shファイル (Linuxの場合)で、
JAVA_OPTSパラメーターに
-Djira.jelly.on = true行を追加します。
その後、JIRAを再度実行し、ADのユーザーがそこからパスワードを使用していることを確認します。
ゼリースクリプトを作成する
最初にユーザーとグループを作成するスクリプトを生成するプログラムを作成しましたが、それを捨てるのは残念でした。 したがって、オーセンティケーターまたはサービスにグループを追加する場合(以下を参照)、このステップをスキップすることもできます。
JIRAでLDAPユーザーを作成するJellyスクリプトを生成するAtlassian Webサイトのドキュメントで、オープンソース
ユーティリティが見つかりました。 ただし、グループを作成する必要もあったため、
Jellyタグに関するドキュメントを用意して、この状態にこのユーティリティを追加しました。
import java.io.File; import java.io.FileReader; import java.util.Properties; import java.util.Random; import javax.naming.NamingEnumeration; import javax.naming.directory.*; import org.apache.commons.lang3.StringEscapeUtils; public class LDAPImporter { public static void main(String[] args) throws Exception { Properties properties = new Properties(); File path = new File(LDAPImporter.class.getProtectionDomain() .getCodeSource().getLocation().toURI()); if (!path.isDirectory()) { path = path.getParentFile(); } properties.load(new FileReader(new File(path, "LDAP.properties"))); properties.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory"); DirContext groupContext = new InitialDirContext(properties); SearchControls groupControls = new SearchControls(); groupControls.setReturningAttributes(new String[] { (String) properties.get("groupNameAttribute"), (String) properties.get("groupDNAttribute") }); groupControls.setSearchScope(SearchControls.SUBTREE_SCOPE); System.out.println("<JiraJelly xmlns:jira=\"jelly:com.atlassian.jira.jelly.JiraTagLib\">\n"); NamingEnumeration results = groupContext.search( (String) properties.get("baseDN"), (String) properties.get("groupFilter"), groupControls);
設定は、プログラムと同じディレクトリにあるLDAP.propertiesファイルから取得され、次のようになります。
# LDAP java.naming.provider.url=ldap://127.0.0.1:389 # DN java.naming.security.principal=cn=test,ou=users,dc=local,dc=domain # java.naming.security.credentials=password # DN baseDN=ou=users,dc=local,dc=domain # groupNameAttribute=name # DN groupDNAttribute=distinguishedName # groupFilter=(objectclass=organizationalUnit) # userLoginAttribute=mail # ( , ) userNameAttribute=displayName # e-mail ( , + @ + ) userMailAttribute=mail # userMailDomain=local.domain # userFilter=(objectclass=user)
この方法で取得されたスクリプトは、セクション管理→オプションと設定→Jelly RunnerのセクションでJiraにフィードされ、少し考えてからユーザーとグループを作成します。
透過的な認証
透過的な認証の概念は次のとおりです。SPNEGOユーザーを認証し、REMOTE USER変数のJIRAに既にログインしているユーザーのユーザー名を渡します。 欠点は、このスキームで
は、ADに属していないユーザーはJIRAにログインできないことですが、私はそれ以上良いものを思いつきませんでした。
SPNEGO
まず、SPNEGO
のパフォーマンスを確認します 。 これを行うには、
krb5.conf 、
login.confおよび
HelloKDC.javaの 3つのファイルをダウンロードします。
[libdefaults]セクションのkrb5.confファイルに
1行がありません。忘れずに入力してください。 設定を変更すると、krb5.confファイルは次のようになります。
[libdefaults] default_realm = LOCAL.DOMAIN default_tkt_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc default_tgs_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc permitted_enctypes = aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc [realms] LOCAL.DOMAIN = { kdc = dc5.local.domain default_domain = LOCAL.DOMAIN } [domain_realm] .LOCAL.DOMAIN = LOCAL.DOMAIN
HelloKDC.java:
...
HelloKDC.javaファイルをコンパイルして実行します。すべてがうまくいった場合は、大量の行を出力し、
接続テストの最後に
成功します。次に、
サポートツールユーティリティセットをダウンロードし、管理者のドメインコンピューターにインストールして、コマンドを実行します。
setspn.exe -A HTTP/domain1 test setspn.exe -A HTTP/domain2 test ... setspn.exe -A HTTP/domainN test
どこで
- test -SPNEGOがADにログインするユーザーログイン
- ドメイン* -JIRAをユーザーが使用できるすべての可能な名前(jira、jira.local.domainなど)
SPNEGOディストリビューションをダウンロードして、
$ JIRA_HOME / libディレクトリに配置します。 ファイル$ JIRA_HOME / conf / web.xmlを開き、次の行を最後に追加します(ただし、web-appタグを閉じる前)。
<filter> <filter-name>SpnegoHttpFilter</filter-name> <filter-class>net.sourceforge.spnego.SpnegoHttpFilter</filter-class> <init-param> <param-name>spnego.allow.basic</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>spnego.allow.localhost</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>spnego.allow.unsecure.basic</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>spnego.login.client.module</param-name> <param-value>spnego-client</param-value> </init-param> <init-param> <param-name>spnego.krb5.conf</param-name> <param-value>krb5.conf</param-value> </init-param> <init-param> <param-name>spnego.login.conf</param-name> <param-value>login.conf</param-value> </init-param> <init-param> <param-name>spnego.preauth.username</param-name> <param-value>test</param-value> </init-param> <init-param> <param-name>spnego.preauth.password</param-name> <param-value>password</param-value> </init-param> <init-param> <param-name>spnego.login.server.module</param-name> <param-value>spnego-server</param-value> </init-param> <init-param> <param-name>spnego.prompt.ntlm</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>spnego.logger.level</param-name> <param-value>1</param-value> </init-param> </filter> <filter-mapping> <filter-name>SpnegoHttpFilter</filter-name> <url-pattern>*</url-pattern> </filter-mapping>
ユーザー名とパスワードを忘れずに置き換えてください。
認証者
オーセンティケーターを作成するときが来ました。そのタスクは、SPNEGOからログインユーザーのログインを取得し、このログインにメールドメインを追加し(電子メールアドレスはJIRAログインであるため)、まだこのプロパティを持っていないユーザーの電話を含むプロパティを入力することです。 JIRA 4.xプラグイン用のSDKにはJiraOsUserAuthenticatorクラスの場所がありません。これに基づいて、オーセンティケーターが記述されます。 このクラスはすでに非推奨です。 したがって、コンパイル時にライブラリに手動で追加する必要があります。
$ JIRA_HOME / atlassian-jira / WEB-INF / classes / com / atlassian / jira / security / login /で取得できます 。
実際には、認証コードは次のとおりです。
import java.security.Principal; import java.util.Properties; import java.util.Random; import javax.naming.NamingEnumeration; import javax.naming.directory.Attribute; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.atlassian.core.user.preferences.Preferences; import com.atlassian.jira.ComponentManager; import com.atlassian.jira.security.login.JiraOsUserAuthenticator; import com.atlassian.jira.user.preferences.UserPreferencesManager; import com.atlassian.jira.user.util.UserUtil; import com.opensymphony.user.Group; import com.opensymphony.user.User; @SuppressWarnings("deprecation") public class RemoteAuthenticator extends JiraOsUserAuthenticator { private static final long serialVersionUID = 1L; private UserPreferencesManager preferencesManager = ComponentManager .getInstance().getUserPreferencesManager();
コンパイルし、
$ JIRA_HOME / atlassian-jira / WEB-INF / classesに入れて、ファイル
$ JIRA_HOME / atlassian-jira / WEB-INF / classes / seraph-config.xmlを開き、その行を変更します
<authenticator class="com.atlassian.jira.security.login.JiraOsUserAuthenticator"/>
に
<authenticator class="RemoteAuthenticator"/>
その後、JIRAを再起動し、お気に入りのブラウザーでKerberos認証を構成して、動作することを確認できます。 非ドメインコンピューターの場合、BASIC認証ウィンドウが表示され、ログインできるようになります(ADにアカウントがある場合)。
サービス
さらに、ADとJIRAのユーザーを定期的に同期し、ADにないユーザーの名前にテキストラベルを追加するサービスが作成されました。 彼女のコードは次のとおりです。
import java.util.Map; import java.util.Properties; import java.util.Random; import javax.naming.NamingEnumeration; import javax.naming.directory.Attribute; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import com.atlassian.configurable.ObjectConfiguration; import com.atlassian.configurable.ObjectConfigurationException; import com.atlassian.core.user.preferences.Preferences; import com.atlassian.jira.ComponentManager; import com.atlassian.jira.event.user.UserEventType; import com.atlassian.jira.service.AbstractService; import com.atlassian.jira.user.preferences.UserPreferencesManager; import com.atlassian.jira.user.util.UserUtil; import com.opensymphony.module.propertyset.PropertySet; import com.opensymphony.user.Group; import com.opensymphony.user.User; @SuppressWarnings("deprecation") public class Importer extends AbstractService implements ObjectConfiguration {
コンパイル済みのjarファイル(
JiraプラグインSDKを使用)とサービスを
$ JIRA_HOME / atlassian-jira / WEB-INF / lib /に配置する必要があります。 [管理]→[システム]→[サービス]セクションでサービスを追加できます。
情報が誰かに役立つことを願っています。