2016-03-21 23 views
1

私は次のシナリオを持っています: Apache HTTPクライアント(Java)を使用して、Webサービスに接続するOracleデータベース(Java SE 6)内で実行されるサーバーがあります。 Webサービスは、Kerberosを使用して、つまりSPNEGO認証を使用して保護する必要があります。GSSManager.createCredentialはKerberosキーとTGTをどのように取得しますか?

私のサーバーには、キータブにエクスポートされたランダムキーを持つKerberosプリンシパルがあり、データベーステーブルにインポートされます。 したがって、KerberosPrincipalには、KerberosKeyオブジェクト(各暗号化メソッドごとに1つ)が関連付けられています。これは、Subject内で収集したすべての情報です。

私は、TGTを取得してSubjectに格納するためにKDCに連絡することを期待しています。それ、どうやったら出来るの?私がこれで見つけたすべてのドキュメントは、これがログインモジュールで起こると仮定していますが、私のシナリオではログインはありません。それとも、私のためにKDCに電話するのですか?

これで、GSSManager.createCredentialを呼び出して、KerberosCredentialsとHttpClientContextに追加できるBasicCredentialsProviderにラップすることができるGSSCredentialを作成する必要があるため、HttpClientはSPNEGO認証を実行できます。

しかし、どのようにしてGSSCredentialに自分のSubjectの情報を取得できますか?

答えて

1

ウェブを約1週間掘り下げた後、最終的に答えはhereです。そのドキュメントから スニペット:

  1. アプリケーションはKrb5LoginModuleはは、KDCからか、既存のチケットキャッシュからのいずれかのユーザーのTGT(KerberosTicketの)を取得順に構成されたKrb5LoginModuleは
  2. を起動するJAASログイン、
  3. を呼び出しますそして秘密認証情報に格納このTGTサブジェクトアプリケーションがポピュレート件名を取得
  4. のセットは、
  5. CLIENTACTIONでのGSSManagerを呼び出しCLIENTACTIONを実行しているスレッドのアクセス制御コンテキストにこのSubjectを置くなSubject.doAs/doAsPrivilegedのを呼び出し.createCredentialメソッド、 Kerberos V5 OIDをdesiredMechsに渡します。
  6. GSSManager.createCredentialは、Kerberos V5 GSS-APIプロバイダを呼び出し、セキュリティコンテキストを開始するためのKerberos認証情報を要求します。
  7. Kerberosプロバイダは、現在のアクセス制御コンテキストからサブジェクトを取得し、プライベート資格情報セットを検索して、ユーザーのTGTを表す有効なKerberosTicketを検索します。
  8. KerberosTicketはGSSManagerに返され、GSSManagerはGSSCredentialコンテナインスタンスに格納して呼び出し元に返します。
関連する問題