この課題の目標は、Java Authentication and Authorization (JAAS) API を使用して認証を行う方法について学習することです。
JAAS は、Java プラットフォーム用の標準のプラグイン可能認証フレームワーク (PAM) を提供しています。 アプリケーションは、JAAS API を使用して認証を実行します。認証とは、このアプリケーションを使用しているユーザーのアイデンティティーを確認し、そのユーザーのアイデンティティー情報をサブジェクトと呼ばれるコンテナに収集するプロセスのことです。次に、そのアプリケーションは、JAAS API とともにこのサブジェクトのアイデンティティー情報を使用して認証判断を行い、認証されたユーザーによる保護されているリソースへのアクセス、または制限されているアクションの実行について、可能かどうかを判断します。この課題では、JAAS 認証について説明します。JAAS 承認については説明しません。
Subject.doAs は、MyAction に定義されているコードを認証されたユーザーとして実行します (行 14 から 15)。このことは、次の 2 つの目的のために行われます。最初に、サービスを認証するためにアイデンティティー情報を必要とする MyAction 内のコードは、サブジェクトからその情報を取得します。この課題では、このことについて説明します。次に、MyAction が保護されているリソースまたは操作にアクセスする場合、現在のサブジェクトのアイデンティティー情報を使用して、対応するアクセス制御が決定されます。この 2 番目の点は、この課題では説明しません。
Jaas.java
のコードリスト。
|
%JAVA_HOME%/bin
がパスに含まれていて、%JAVA_HOME%
変数によってポイントされている JDK が Java SE 6 をポイントしていることを確認します。% cd auth/src % javac Jaas.javaいくつかの設定を行なったあと、後続の課題でこのコードを実行します。これでこの課題は終了です。
この課題では、JAAS API の主なクラスである LoginContext
および Subject
が使用されています。LoginContext
を使用してユーザーを認証し、Subject
にそのユーザーのアイデンティティー情報を収集する方法について学習しました。次に、Subject
を使用して認証されたユーザーとしてアクションを実行する方法についても学習しました。
この課題の目標は、認証用に Kerberos を使用するために JAAS アプリケーションを構成する方法について学習することです。
Kerberos は、RFC 4120 に定義されている、信頼できる第三者の認証を行うためのインターネット標準プロトコルです。Kerberos は、Solaris、Windows XP、Linux など、ほとんどの最新のコンピューティングプラットフォームで使用できます。
Kerberos アーキテクチャーでは、Key Distribution Center (KDC) と呼ばれる信頼できる認証サービスが軸となります。Kerberos 環境内のユーザーおよびサービスは「プリンシパル」と呼ばれます。各プリンシパルは、KDC を使用してパスワードなどの秘密を共有します。プリンシパルは、共有の秘密を知っていることを KDC に対して証明することによって、Kerberos に対して認証します。 認証が正常に行われると、KDC はプリンシパルに「Ticket-Granting-Ticket」(TGT) を発行します。プリンシパルは、そのあと、ディレクトリサービスやファイルサービスなどのネットワーク上のサービスへの認証を行う場合 (つまり、サービスの「クライアント」として動作する場合)、TGT を KDC に渡してサービスチケットを取得し、サービスと通信します。サービスチケットは、クライアントとサービスのプリンシパルのアイデンティティーを示すだけでなく、そのあとセキュアな通信を確立するためにクライアントとサービスが使用できるセッション鍵も含みます。サービスに対して認証を行うために、クライアントはサービスチケットをサービスに送信します。サービスは、そのチケットを受信したあと、KDC と共有する秘密を使用してそのチケットを復号化します。
このアーキテクチャーでは、プリンシパルは KDC に対して直接 (1 回だけ) 認証します。プリンシパルは、サービスチケットを使用してほかのすべてのサービスに対して間接的に認証します。KDC では、サービスチケットによってプリンシパルのアイデンティティーが保証されます。明示的な認証を 1 回だけ行なって、プリンシパルが複数のセキュアなサービスにアクセスできる機能のことを、シングルサインオンと呼びます。
この課題の JAAS の内容:
JAAS では、クライアントプリンシパルの場合、「Kerberos にログインする」とは、TGT を取得して、クライアントがアクセスするサービスへの認証に使用できるように Subject
にその TGT を配置することを意味します。サービスプリンシパルの場合、「Kerberos にログインする」とは、着信するクライアント認証要求を復号化するときにサービスが必要とする秘密鍵を取得することを意味します。
この課題のリソース:
実行手順:
src/jaas-krb5.conf
にありますこのファイルには、「クライアント」および「サーバー」の 2 つのエントリがあります。 「クライアント」エントリは、LoginContext
は com.sun.security.auth.module.Krb5LoginModule
を使用する必要があることを示しています。「サーバー」エントリは、LoginContext は同じログインモジュールを使用し、プリンシパル host/machineName
に対して sample.keytab
ファイルのキーを使用する必要があることを示しています。
jaas-krb5.conf
のコードリスト。
|
jaas-krb5.conf
のクライアントエントリを使用して JAAS サンプルを実行したときの出力
|
jaas-krb5.conf
の「サーバー」エントリを使用して JAAS サンプルを実行したときの出力。
|
サマリー:
この課題では、ユーザー名とパスワードを対話式に入力するクライアントプリンシパル、およびキータブファイルから鍵を取得するサービスプリンシパルとして、Kerberos ログインモジュールを使用するために JAAS アプリケーションを構成する方法について学習しました。