企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!
企業における日々の業務で、メールや業務アプリケーションなど複数のアプリケーションを同時に利用することは、もはや不可欠です。しかし、アプリケーションの多くは、ユーザーにIDとパスワードを入力させ、ログインを促すものがほとんどです。
1つのアプリケーションの利用だけならば、IDとパスワードを記憶するのは簡単です。しかし、複数のアプリケーションのIDやパスワードを記憶するのは簡単なことではありません。また、アクセスコントロールにおけるセキュリティの面からも、ログイン方法の異なる複数アプリケーションを利用することは好ましくありません。
今回紹介する「シングルサインオン」は、複数アプリケーションによるIDやパスワードの管理をシンプルにします。また、内部統制を画一化する側面も持ち合わせています。今回は、ID管理とシングルサインオンについて説明していきます。
ID(アイデンティティ)管理とは、ユーザーIDや権限といったアプリケーションがユーザーを特定するための重要な情報を、ユーザーやシステム管理者が管理することです。
ID管理の構成要素は、以下の4つに分類できます(表1参照)。
種類 | 説明 |
---|---|
認証 | ユーザーIDやパスワードなどに応じて、アプリケーションがユーザーの正当性を判定する仕組み |
シングルサインオン (SSO) |
複数アプリケーションの認証をひとまとめにし、アプリケーションなどにアクセスできる仕組み |
アクセスコントロール (アクセス制御) |
ユーザー権限に応じて、アプリケーションの画面や機能などへのアクセスを制御する仕組み |
プロビジョニング | ユーザーアカウント(ユーザーID)を管理する仕組み(「アカウントプロビジョニング」ともいわれる) |
表1 ID管理の構成要素 |
今回は認証とシングルサインオンに焦点を当てて説明します。その理由は、以下の3点です。
認証を大きく2つに分類すると、【A】1対1認証と、【B】複数間認証に分類できます。
「1対1認証」とは、アプリケーションによるユーザー判定です。このユーザー判定は、ユーザーが持つID(アカウント)やパスワードなどの認証情報に応じて行われます。ごく一般的なアプリケーションのログイン画面などは、この1対1認証に当てはまります。そのため、非常によく知られた認証方法だといえます。
また、ID管理における認証は基本的に、こちらを指します。従って、本連載内での「認証」も、こちらを指すと認識しておいてください(こちらの認証方法については、前回の「社内システムのセキュリティとアクセス制御の常識」で説明しています)。
「複数間認証」とはユーザーやWeb画面が、認証局によって発行される証明書を利用して行う認証の仕組みです。この証明書を用いることで、ユーザーやWeb画面は自らの信頼性を高めることができます。複数間認証について詳しく知りたい方は、記事「PKI再入門 - 第5回 公開鍵との結び付きを証明する第三者認証局」を参照してください。
以上が2種類の認証についての説明です。認証について、簡単なイメージがわいてきたのではないでしょうか。
次に、もう少し踏み込んで、Javaで認証を実現するための標準APIについて説明します。
Javaには、認証を実現するための標準APIとして「JAAS」パッケージが用意されています。まずは、JAASの構成要素と簡単な説明を示した表2を参照してください。
種類 | 説明 |
---|---|
JAAS認証 | ・IDやパスワードなどを利用して認証を行うことで、ユーザーの正当性を判定 ・Javaを実行しているユーザーに正当性があることを確認 |
JAAS承認 | ・アプリケーションによって、リソースへのアクセス要求が許可できるのかを判定 ・ユーザーに対するアクセス権の保持を判定 |
表2 JAASの構成要素 |
もう少し具体的に見ていきましょう。
JAAS認証では、ユーザーを認証する際、一般的に以下のクラスとインターフェイスが利用されます。
クラス/インターフェイス | 説明 |
---|---|
javax.security.auth.login.LoginContext | ・認証を行うための基本的なメソッドが用意されているクラス ・LoginModule(後述)をプラグインすることで、独自の認証機能を持ったアプリケーション開発を補助 ・複数のLoginModuleを実装可能 |
javax.security.auth.spi.LoginModule | ・アプリケーションごとに、特定の認証方法を提供するインターフェイス ・アプリケーションごとに別々の認証方法を指定可能 |
javax.security.auth.callback.CallbackHandler | ・アプリケーションが認証作業を行う際、LoginModuleに認証情報を引き渡すインターフェイス ・引き渡す認証情報は、引き渡されるcallbackによって異なる |
javax.security.auth.callback.Callback | CallbackHandlerに渡すことで、アプリケーション側からの要求に応じた認証情報を設定可能なインターフェイス |
表3 JAAS認証で用いられるクラスとインターフェイス |
それでは、表3内のクラスとインターフェイスを利用した、認証作業の処理の流れを見ていきましょう。下記リストを見てください(JAASのリファレンスガイドを参考に作成しました)。
JAAS承認は現在実行中のコード、およびユーザーにアクセス権を付与したうえで以下のクラスを用いて認証作業を行います。その際、承認を判断するために用いられるのがJavaに標準で備え付けられているPolicyファイルです。
クラス | 説明 |
---|---|
java.security.Policy | ・セキュリティポリシーを表す抽象クラス ・セキュリティポリシーはPolicyファイルを利用して、ソースコードのアクセス権などを設定できる |
javax.security.auth.AuthPermission | セキュリティを設定するパラメータの名前だけが格納可能な認証クラス |
javax.security.auth.PrivateCredentialPermission | 非公開の信用証明書情報をユーザーのアクセスから保護するためのクラス |
表4 承認で用いられるクラス |
以上が、JAASについての説明です。より詳しく知りたいという方は、JAASのリファレンスガイドを参照してください。次ページ以降では、シングルサインオンについて解説していきます。
Copyright © ITmedia, Inc. All Rights Reserved.