背景
- 業務で OpenID Connect や SAML を触る機会がありました
- その文脈で OpenAM を触る必要があったため、忘れないようにメモります
OpenAM とは
Wiki を読むと、Sun Microsystems 社が OpenSSO として開発し、2016年まで ForgeRock 社にサポートされ、現在は OSS(Open Identity Platform Community サポート)に至る。(※ wiki)
OpenAM は複数機能を有しています。
- Authentication
- Authorization
- Adaptive risk authentication
- Federation
- Single sign-on(SSO)
- High availability
ざっと読んでイメージを掴みたいと思います。
Authentication
- 複数の認証方式をサポート。JAVA でカスタム認証モジュールを作れる。
Authorization
- XACML (eXtensible Access Control Mark-Up Language)に基づいてポリシーを作れる。XACML って...聞いた事ないです...
Adaptive risk authentication
- 認証対象のユーザをスコア算出(ex:IPアドレス範囲、アイドル時間、新規デバイス)し、スコアに基づいて追加認証を要求する。
Federation
- Federation はセキュアに identity 情報を共有する。要は SMAL2.0 や OpenID Connect をサポートし、認証ゲートウェイ(multi protcol-hub)になります。
Single sign-on(SSO)
- Federatin とほぼ同義ですね。OpenAM は agent(アプリ側にインスト)があるようで、agent インスト不可環境でも色々できます。
High availability
- session failover 機能を有します。いわゆる NW 機器の Active-Standby 構成でしょうか。
Developer access
- client application programming interfaces を Java,C APIs,a RESTful API 提供しているようです。
とりあえず触ってみたい
gitに諸々上がっていますので、docker run する方式が一番簡単そうです。git の README にも、既存環境に変更を加えることなく、SAML2.0, OICD, Cross Domain Single sign on(CDSSO)を提供すると言っています。OSS の認証ゲートウェイですね。
Quick Start Guide
Quick Start Guideを読みながら環境を用意します。
検証環境
- CnetOS:
CentOS Linux release 7.8.2003 (Core)
- Docker:
Docker version 20.10.12, build e91ed57
手順
1.Docker 環境を用意します。
2.Docker を動作させている host 側の /etc/hosts ファイルを修正します。
127.0.0.1 localhost openam.example.com www.example.com
3.docker run をコマンド実行します。
#docker run -h openam.example.com -p 8080:8080 --name openam openidentityplatform/openam
// -h : ホスト名を指定
// -p : ポートを指定(ホスト側:コンテナ側)
// -name : コンテナ名を指定
Unable to find image 'openidentityplatform/openam:latest' locally
latest: Pulling from openidentityplatform/openam
627b765e08d1: Pull complete
c040670e5e55: Pull complete
073a180f4992: Pull complete
bf76209566d0: Pull complete
f10db7ba7580: Pull complete
5e5dee180760: Pull complete
c26c02f721c2: Pull complete
d24d42fda432: Pull complete
20abf5c2533f: Pull complete
d16e82e0b4a0: Pull complete
4f4fb700ef54: Pull complete
8ce75fc249df: Pull complete
Digest: sha256:7fda33515006c61fdf71011cf65d40abee462686515f96461a7fbedd41bafd9b
Status: Downloaded newer image for openidentityplatform/openam:latest
image をダウンロードしてコンテナを起動します。結構 info が出力されますね。
4.docker ps コマンドを実行します。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
59383bab0fd2 openidentityplatform/openam "/usr/local/tomcat/b…" 4 minutes ago Up 4 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp openam
5.正常に起動したようなのでホスト側から http://openam.example.com:8080/openam にアクセスします。
6."Create Default Configuration" を選択して進めます。規約に agree して、先に進むとパスワード設定が必要になります。スーパーユーザーと agent 側で必要になるようです。忘れずどこかにメモっておきます。
7.設定が完了すると、ログイン画面が表示されます。amAdmin と先ほどのパスワードを入力してログインします。
ここまでで環境準備は終わりました。まずは簡単そうな SSO あたりから初めて、最終的に OCID を動かしたいと思います。
8.デフォルトの Top Level Realm を選択し、Authorization -> Policy Sets -> New Policy Set の順番でクリックします。
マニュアルを読むと、Policy Sets はポリシーのテンプレートとして使われるようです。
・Id は必須項目
・Nmae は option です
・Resoure Types は URL を指定
9.オブジェクト作成完了後、実際の Policy を追加する必要があるので、Add a Policy していきます。
11.新規作成 Policy に許可するメソッドを指定するようです。GET と POST を追加します。
12.Subject Condition(要はアクセス許可対象?)を設定します。先ほど作成した Authenticated Users を指定します。
13.Applications -> Web Agents を選択し、画面中段の Agent を新規作成する New...ボタンを選択します。
14.Cookie 設定を追加するべき Global Services は何も表示されない。とりあえずスキップします。
15.任意の作業フォルダに apache 用の Dockerfile を作成します。パスワードのみ OpenAM セットアップ時に指定した agent のパスワードを指定します。
/home/user/openam-quickstart/apache/
16.Dockerfile 保存パスは適宜変更して docker build コマンドを実行します。
docker build --network=host -t apache_agent -f /home/user/openam-quickstart/apache/Dockerfile /home/user/openam-quickstart/apache/
ちょろちょろエラー出ます...時間無いので続きは今度!!
17.リダイレクトを確認して終了ですね。
あとがき
OpenAM 勉強本はほぼ洋書のみなんですね...Qiita 記事と Google さんでどうにもならなかったら手を出すしかないんですね...