30代半ばの事務職員がITエンジニアになった話

おおよそタイトルのとおり、30代半ばにしてITエンジニアのタマゴになってしまった会社員の話

【SSO】ShibbolethでSAML認証シングルサインオンの設定にチャレンジしてみた

あれば便利だけど
どうしてもないと困るわけでもない
むしろ初期から導入されていた場合、
存在すら気づかれないかもしれない
その割には設定がえらく煩雑
だったりする


そんなシングルサインオン
設定したときの話


シングルサインオンとは


今回に限らずこの手のイタズラ試行は
細かい学習をすっ飛ばして
実際のアプリケーションの
Configファイルをいじったりと
手を動かすことから入る傾向がある


そのほうが覚えるのが早いこともあるけど
最低限のポイントは事前にわかっていると
より効率的に理解できる気がする


SSOの本当に基礎的な構成

IdP  -  SSOで認証するためのユーザーIDやらの情報を送る側
   ユーザーIDとパスワードを入力する
SP  -  SSOで認証するためのユーザーIDやらの情報を受ける側
   IdPで入力されたユーザーIDでログインする


最低限このくらいの情報が
事前にわかっていれば
だいぶ違った気がすると今さらながら…


Shibboleth


細かいことはよくわからないけど
既存の仕組みで使われていた
アプリケーションを利用
オープンソースの代物で
ケチって有償のものを買わなかった様子


IdP(送り側)にもSP(受け側)にも
なれるので当初違いがわからず戸惑う


今どきのSSOのサービスは
Web上で提供されてたりして
操作画面もGUIでわかりやすく
なってたりするけど
こいつはConfigファイルや
XMLファイルをつらつら
書いていく必要がある

SSOを実現したいサービスを追加する


IdPとしてShibbolethを使っている場合に
ログイン情報を新たなSP側に送るための設定


具体的にはShibbolethを使った
独自の認証システムで
例えばGoogleなどに認証情報を送って
自動ログインさせたいといった
シチュエーション


認証情報を共有できるのはSAMLという規格が
決まっているからなのだけど
この辺の小難しい話は省略


まずメタデータを登録する

/どこかのフォルダ/shibboleth-idp/metadata/

Linux環境


配下に受け側のサービスから提供された
xml形式のメタデータを格納する


メタデータが提供されていればいちばん
手っ取り早いのだけど、ない場合も多い
その場合、ログイン先のURLが提供
されていたりするのでその情報を登録する


Shibbolethの場合は親切機能はないので
メタデータを最低限のかたちで自分で作って
上記のフォルダに格納することになる



こんなふうに最低限の情報を入れて
任意の名前でxml形式で保存すればいいみたい

<?xml version="1.0"? encoding="UTF-8"?>
<EntityDescriptor entityID="受け側のサービスから提供されるエンティティID" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
  <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>
    <AssertionConsumerService index="1" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
         Location="受け側のサービスから提供されるログインURL"/>
  </SPSSODescriptor>
</EntityDescriptor>


まだまだ先は長いので次回に続く