サブジェクト、プリンシパル、認証、およびクレデンシャル

リソースへのアクセスを承認する場合、最初に、アプリケーションが要求元を認証する必要があります。 JAAS フレームワークでは、要求元を表すのに「サブジェクト」という用語が使用されます。 サブジェクトは、ユーザやサービスなどの任意のエンティティです。 サブジェクトは、javax.security.auth.Subject クラスで表されます。

「認証」は、サブジェクトの識別情報を検証するプロセスを表します。認証は、セキュリティ保護された方法で実行する必要があります。さもないと、悪意のあるユーザが他のユーザを装ってシステムへのアクセスを試みる可能性があります。 通常、認証には、識別情報を証明する何らかの証拠を示すサブジェクトが含まれます。 この種の証拠には、サブジェクトだけが知り得るまたは保持し得る情報 (パスワードや指紋など)、またはサブジェクトだけが作成可能な情報 (非公開鍵を使用した署名付きデータなど) があります。

認証が完了すると、サブジェクトは関連付けられた識別情報、つまり「プリンシパル」( java.security.Principal タイプの) を使って生成されます サブジェクトには、多数のプリンシパルを含めることができます。 たとえば、ユーザは、他のサブジェクトと明確に区別される名前プリンシパル ("John Doe") および SSN プリンシパル ("123-45-6789") を保持できます。

サブジェクトは、関連付けられたプリンシパルに加え、「クレデンシャル」と呼ばれる独自のセキュリティ関連属性を保持できます。 クレデンシャルには、新規サービスに対してサブジェクトを認証する際に使用可能な情報が含まれます。 この種のクレデンシャルには、パスワード、Kerberos チケット、および公開鍵証明書が含まれます。 クレデンシャルには、サブジェクトによる特定操作の実行を可能にするデータが含まれる場合もあります。 たとえば、暗号化鍵は、サブジェクトによるデータへの署名または暗号化を可能にする資格を表します。 public および private クレデンシャルクラスは、コア JAAS クラスライブラリの一部ではありません。 したがって、あらゆるクラスがクレデンシャルを表すことができます。