JOCコックピット - 認証と認可

#訳注
本記事はSOS社のナレッジベース記事[JOC Cockpit - Authentication and Authorization](https://kb.sos-berlin.com/display/PKB/JOC+Cockpit+-+Authentication+and+Authorization)の2017/3月末時点での翻訳です。
元記事は随時更新されていますので、できるだけアップデートしていくつもりですが、一応元記事も確認してください。

----

#イントロダクション
JOCコックピットは、WEBアクセス(GUI/API)するユーザーに、認証と認可の仕組みを提供しています。
認証は、[Apache Shiro](https://shiro.apache.org/)準拠の設定ファイルやLDAP準拠のディレクトリサービス、またはデータベースに格納された情報によって行われます。
認可はロールで定義され、システム管理者はユーザー毎にロールを割り当てできます。
JOCコックピットは、複数のユーザーの認証と複数のJobSchedulerに対する認証を同時に処理できます。

#アーキテクチャー
JobSchedulerのアーキテクチャーは、個々のクライアントに対して各々のJobSchedulerマスターを使用でき、またユーザー認証によって割り当てられたロールが許可される操作を制御できます。
このアプローチは、ファイルやフォルダなどのリソースに応じて権限とアクセス許可を割り当てる他のシステムとは対照的です。
ロールベースの権限とアクセス許可を使用すると、多くの重要な利点がもたらされます。

 - 複雑な環境での管理を簡素化することができます。マルチクライアントシステムにおける数百のフォルダのアクセス許可の管理は管理可能ですが、数千回の操作許可は非常に高い管理負荷とミス発生の可能性をもたらします。 
 - ロールベースの権限とアクセス許可では、個々のクライアントの権限とアクセス許可を個別に管理できます。
 - 権限とアクセス許可を明確に分離することで、コンプライアンス要件の簡素化も容易になります。

#インプリメンテーション
JOCコックピットは、 [Apache Shiro](https://shiro.apache.org/)を使用してユーザーの認証と認可を行っています。
[Shiro](https://shiro.apache.org/)が使用する認証と認可の情報は、下記のリソースを使用できます。

 - 設定された認証および認可の方法に応じた認証および認可情報を含むローカル設定ファイル（shiro.ini）
 - Microsoft Active DirectoryなどのLDAPインターフェイスを提供する認証サービス
 - Shiroデータモデルの要件に準拠している認証情報と認可情報の両方を含むデータベース、このデータベースは、システム管理者によって管理されます

#認証
JOCコックピットはログイン画面からユーザー名とパスワードを受け取り、 shiro.iniファイルの設定内容に応じて次のいずれかを行います。

 - shiro.iniファイルに格納されている情報に対して資格情報を検証しようとします
 - 指定された資格情報を使用してLDAPディレクトリサービスにログインしようとします
 - Shiro準拠のデータベースに格納されている情報と照合します

生成されたクレデンシャル情報は、以降のJOCコックピットからJobScheduler WebサービスAPIへのHTTP要求ごとに、認証に使用されます。

 - ブラウザはセッション中にクレデンシャル情報をキャッシュすることができますので、新しいブラウザタブでJOCコックピットを開くたびに再利用されます。 クレデンシャル情報のキャッシュは、ブラウザの終了時にクリアされます。
 - この動作は、ブラウザとバージョンによって異なる場合があります。

ローカルのshiro.iniファイルの設定については、[Authentication and Authorization - Configuration](https://kb.sos-berlin.com/display/PKB/Authentication+and+Authorization+-+Configuration)の記事で詳しく説明しています。

####認証方法
前述した認証方法の特徴は次のとおりです。

- Shiro認証：
	- セキュリティが比較的重要でない開発環境での使用を想定しています。
	- ユーザーのパスワードは暗号化されていないshiro.iniファイルにプレーンテキストで保存されます。
- LDAP認証：
	- LDAPがすでに使用されている運用環境での使用を想定しています。
	- shiro.iniファイルには、LDAPサービスを指定する情報が含まれています。
- データベース認証： 
	- 本番環境での使用を想定しています。
	- shiro.iniファイルには、データベースを指定する情報が含まれています。
	- 認証情報は、システム管理者がデータベースに手動で入力します。

#認可
認証に成功した後、JOCコックピットはユーザーに割り当てられたロールについて、ロールと権限のマッピングを確認します。 このマッピングを指定する方法は、ユーザー認証に使用する方法によって異なります。

- Shiro認証：
	- ローカルのshiro.ini構成ファイルに記述されている権限へのロールのマッピングを使用
- LDAP認証：
	- Active Directoryのグループメンバーシップを検索するLDAPクエリを使用。 Active Directoryグループは、1つ以上のShiroロールにマッピングされます。 このロールは、ローカルのshiro.ini構成ファイルに記述されている情報を使用して一連の権限にマップされます。
- データベース認証：
	- Hibernateクエリを使用して、認証に使用されているのと同じデータベースに格納されるロール権限テーブルに対して、ユーザーのロールを確認します。

デフォルトでは、shiro.ini構成ファイルにはロールと権限のマッピング例が含まれています。 このマッピングは、Shiro認証とLDAP認証で使用することができ、[Authentication and Authorization - Permissions for the JOC Cockpit Web Service](https://kb.sos-berlin.com/display/PKB/Authentication+and+Authorization+-+Permissions+for+the+JOC+Cockpit+Web+Service)の Matrix of Roles and Permissionsのセクションに示されています。

- システム管理者は、 shiro.ini構成ファイルを変更することによって以下の操作が可能です。
	- マッピングに独自のロールを追加
	- ロールに割り当てられている権限を変更
- システム管理者は、Shiro認証の代わりにデータベース認証を使用することもできます。ただし、管理者は独自のSQLを作成する必要がありますが、残念ながらこのためのGUIも、バッチファイルも提供されていません。
- shiro.iniファイルの設定については、[Authentication and Authorization - Configuration](https://kb.sos-berlin.com/display/PKB/Authentication+and+Authorization+-+Configuration)の記事で詳しく説明しています。

#ユーザープロファイルとロールの表示
JOCコックピットのプロファイル表示で現在割り当てられている権限を確認できます。 JOCコックピットウィンドウの右上にあるユーザメニューから開くプロファイルを選択すると下記のような一覧表示が確認できます。 
![スクリーンショット 2017-03-27 18.33.13.png](https://qiita-image-store.s3.amazonaws.com/0/52445/2532de60-847f-abbd-551f-32d91a37f028.png "スクリーンショット 2017-03-27 18.33.13.png")

このビューはすべてのユーザーに対して読み取り専用です。変更は、システム管理者によって[Authentication and Authorization - Configuration](https://kb.sos-berlin.com/display/PKB/Authentication+and+Authorization+-+Configuration)の記事で説明されているロールとアクセス許可を変更する方法によってのみ行うことができます。