1

アプリケーションでユーザーを認証するために OpenAM 9.5.2 を使用しています。認証はうまく機能しますが、最終的なアプリケーションからユーザー メンバーシップを取得する際に問題が発生します。

openam でグループ「somegroup」を定義し、ユーザーをこのグループに追加しました。私のアプリケーションでは、認証されたユーザーがこのグループのメンバーであるかどうかをテストしたいと考えています。私がそれをテストしている場合:

request.isUserInRole("somegroup");

結果が出falseます。実際、私はテストする必要があります

request.isUserInRole("id=somegroup,ou=group,dc=opensso,dc=java,dc=net");

true応答を得るために。

sso エージェント構成で特権属性マッピング リストを定義して にマッピングできることはわかっていますid=somegroup,ou=group,dc=opensso,dc=java,dc=netsomegroup、ロールとグループが外部データベースに保存されているため、私の状況には適していません。データベースでロールを定義し、sso エージェント conf でマッピングするのは便利ではありません。

私の質問: openamsomegroupに長いユニバーサル ID の代わりに「短い」(つまり) グループ名を使用させる方法はありますか?

4

2 に答える 2

0

私の知る限り、これは現在、すぐに使えるコードでは不可能です。グループの数が限られている場合は、特権属性のマッピングが有効な場合がありますが、そうでない場合、問題はさらに複雑になります。

要件に合わせて AmRealm 実装 (authenticateInternal メソッド) を変更し、新しいクラスをコンテナー固有の ServiceResolver クラス ( http://sources.forgerock.org/browse/openam/trunk/opensso/products/など) にフックすることができます。 j2eeagents/tomcat/v6/source/com/sun/identity/agents/tomcat/v6/AmTomcatAgentServiceResolver.java?r=700&r=700&r=700 )

非 UUID 形式でメンバーシップ情報をロールに入れる構成プロパティの提供に関する JIRA の問題を作成することもできます。

于 2012-10-19T06:33:07.707 に答える
0

これは答えではなく、ただの発言です。

私はopenamソースでいくつかの調査を行いましたが、openamがリクエストをビルドするときに、リポジトリに保存されているロール名がuniversalIdに置き換えられていることを確認しているようです. これはcom.sun.identity.idm.server.IdRepoJAXRPCObjectImpl.javaクラスで実行されます。

public Set getMemberships_idrepo(String token, String type, String name,
                                 String membershipType, String amOrgName,
                                 String amsdkDN
) throws RemoteException, IdRepoException, SSOException {
  SSOToken ssoToken = getSSOToken(token);
  Set results = new HashSet();
  IdType idtype = IdUtils.getType(type);
  IdType mtype = IdUtils.getType(membershipType);
  Set idSet = idServices.getMemberships(ssoToken, idtype, name, mtype, amOrgName, amsdkDN);
  if (idSet != null) {
    Iterator it = idSet.iterator();
    while (it.hasNext()) {
      AMIdentity id = (AMIdentity) it.next();
      results.add(IdUtils.getUniversalId(id));
    }
  }
  return results;
}
于 2012-10-18T15:21:00.137 に答える