Help us understand the problem. What is going on with this article?

OpenAMと連携したPolicy Agentの設定をさわってみる その1

More than 3 years have passed since last update.

今日やること

昨日の記事で挙げたPolicy Agentでできることから、下記の2つの動作を実際に確認していきたいと思います。

  • 認証したユーザーの属性情報の連携ができる
  • Webサーバーの特定のリンクを踏むと、サインアウトできる

前準備

まず、検証用のアカウントを作成します。OpenAMの管理者コンソールにはアカウント管理のインターフェースがあるので、ここから作業を行います。

OpenAMの管理者アカウント(ユーザー名はamadmin)でサインインし、Top Level Realm => Applications => Subjectsとアクセスし、 新規をクリックします。

001.PNG

アカウント作成の画面が表示されますので、下記のユーザーを作成します。

  • ID
    • johnd
    • john
    • doe
  • フルネーム
    • john doe
  • パスワード
    • (適当に)

こんな感じです。

002.PNG

認証したユーザーの属性情報の連携ができる

まず、ユーザーのアカウントの属性情報が連携できることを確認します。

プロファイル属性処理の設定

OpenAMの管理者アカウント(ユーザー名はamadmin)でサインインし、Top Level Realm => Applications => Web Agentsにアクセスし、昨日作成を行ったPolicy Agentの設定であるWebPolicyAgentForApache22をクリックします。

003.PNG

アプリケーションのタブからプロファイル属性処理をクリックします。

004.PNG

このプロファイル属性処理は、認証したユーザーのプロファイル属性(名や姓、設定していれば所属や役職)をHTTPのHEADERやCookieにセットするといった設定となります。
ここでは、試しにcn(氏名)、givenName(名)とsn(姓)を連携してみましょう。

こんな感じで書きます。

マップキー マップ値
cn CUSTOM-Common-Name
givenName CUSTOM-Given-Name
sn CUSTOM-Sir-Name

入力後はこんな感じです。

005.PNG

ヘッダーが連携されていることを確認するCGIをおく

この作業はPolicy AgentがインストールされたApacheが動いているサーバー(本記事ではweb.example.com)で行います。

適当にPerlで書き起こします。別にphpinfo()でも構わないと思います。

cat /var/www/cgi-bin/headerinfo.pl 
#!/usr/bin/perl --
use strict;
use warnings;
use CGI;

my $q = CGI->new;
my %headers = map { $_ => $q->http($_) } $q->http();

print $q->header('text/plain');
print "Got the following headers:\n";
for my $header ( keys %headers ) {
    print "$header: $headers{$header}\n";

CGIファイルに実行権限を付与します。

$ sudo chmod +x /var/www/cgi-bin/headerinfo.pl 

PerlのCGIパッケージをインストールします。

$ sudo yum -y install perl-CGI

検証用アカウントでアクセス

ブラウザを立ち上げて、先ほど作成したCGIプログラムにアクセスします。本記事でのURLはhttps://web.example.com/cgi-bin/headerinfo.plとなります。

アクセスをするとOpenAMのサインページが表示されますので、検証用アカウント(ユーザー名はjohnd)でサインインします。

006.PNG

サインイン後、CGIプログラムが実行され、現在セットされているHTTP HEADERが表示されます。
設定を行った3つのCUSTOM HEADERがセットされていることが確認できますね。

007.PNG

軽くまとめ

  • プロファイル属性処理の設定を使うと認証済みユーザーの属性情報を連携できる
  • このHTTP HEADERを使って、アプリケーションの既存の認証を通したりできる(無理やりにでも)
    • アプリケーションでHTTP HEADERをみて認証してもらうように既存の認証を変更してもらうとか
    • Apache上でCGIプログラムを動かして、既存の認証フォームにPOSTしちゃうとか(代理認証とか呼ばれてるようです)

Webサーバーの特定のリンクを踏むと、サインアウトできる

次行ってみましょう。

実際的なことを考えると、Policy Agentが導入されるApacheやそのバックエンドのアプリケーションサーバーで動いているアプリケーションは既存のサインアウトの機能があるでしょう。
ただ、アプリケーションのサインアウトだけしても、OpenAMのセッションは生きているので、アプリケーションには認証なしでアクセスできてしまいます。ユーザーが意思を以ってサインアウトするのであれば、OpenAMのセッションも消して欲しいな~?...というようなニーズに応えられるのが、ここで紹介するシングルログアウトの機能です。

エージェントログアウトURL

それでは、設定していきます!
プロファイル属性処理の設定と同じように、OpenAMの管理者アカウント(ユーザー名はamadmin)でサインインし、Top Level Realm => Applications => Web Agentsにアクセスし、昨日作成を行ったPolicy Agentの設定であるWebPolicyAgentForApache22をクリックします。

その後、OpenAMサービスタブから、エージェントログアウトURLをクリックします。

008.PNG

ここではシングルログアウトするURLを設定します。認証済みのユーザーは、このPolicy Agentが導入されたWebサーバー上のURL にアクセスすると OpenAM セッションからログアウトされちゃいます。
本記事ではhttps://web.example.com/signoutと設定します。

009.PNG

エージェントログアウトURLにアクセス

それでは試してみましょう。
まず、普通にPolicy Agentが導入されたApacheにアクセスします。本記事ではhttps://web.example.com/となります。

OpenAMのサインイン画面が表示されますので、検証用アカウント(ユーザー名はjohnd)でサインインします。

010.PNG

サインインに成功すると、おなじみのApacheの画面が表示されます。
ここで、アドレスバーに先ほど設定したエージェントログアウトURLを入力し、アクセスを行います。本記事ではhttps://web.example.com/signoutとなります。

すると、無事にOpenAMのセッションも破棄された雰囲気の画面が表示されます。

011.PNG

デベロッパーツールで確認してみますと、きちんとブラウザのCookieストアからも消されてますね!

012.PNG

軽くまとめ

  • Policy Agentを導入済みのWebサーバーでシングルログアウトするためのURLを設定できる
  • 認証済みのユーザーはそのURLを踏むとOpenAMのセッションが消されて、OpenAMのサインアウト画面にリダイレクトされる

ただ、単純にアプリケーションが本来持っているサインアウトURLを設定するのは難しいんじゃないかなぁ?やっぱり、Policy Agentによって、守られているとはいえ、アプリケーションのセッションも消してから、OpenAMのセッションを消す必要があるんじゃないかと。アプリケーションのセッションが残ったまんまだと、再度OpenAMで認証したとしても、前のアプリケーションのセッションを使いまわしてしまって、想定外のタイミングでアプリケーションのセッションタイムアウトが起こりそうだなぁ。望ましい設定としては、アプリケーションのサインアウトのURLじゃなくて、アプリケーションのサインアウト完了のURLかなぁ。

今日はこのぐらいで!
明日はアクセス制御するためにポリシーと呼ばれている設定をいじってみる。

ばい!

nanazero
i'm a strolling system engineer.
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした