2012年4月15日日曜日

Shibboleth2.4.3 SAML SP インストール

Shibboleth SPのインストール手順についてまとめる。


①以下のサイトから、.msiをダウンロードする。
http://shibboleth.net/downloads/service-provider/2.4.3/win64/shibboleth-sp-2.4.3-win64.msi

②ダウンロードした.msiを実行する。以下のようなインストール画面が表示されるため、「Next」を実行する。

③ライセンスの同意画面が表示されるため、「I accept…」を選択し、「Next」を押下する。

④インストール先ディレクトリの確認画面が表示される。そのまま「Next」を押下する。

⑤shibdデーモンで利用するポートの確認画面が表示される。そのまま(デフォルト1600)、「Next」を押下する。

⑥ISAPI Filterで利用する拡張子の確認画面が表示される。そのまま「Next」を押下する。

⑦最終確認画面が表示される。そのまま「Next」を押下する。インストールが開始される。


⑧インストール完了画面が表示される。「Finish」ボタンを押下する。


⑨Windowsを再起動する。

 「C:\opt\shibboleth-sp\var\log\shibboleth」配下に、shibd.logが出力されていることを確認する。
----------------------------------------------------------

2012-04-15 18:37:01 INFO Shibboleth.Listener : registered remoted message endpoint (default::getHeaders::Application)
2012-04-15 18:37:01 INFO Shibboleth.Listener : listener service starting

----------------------------------------------------------




OpenSolaris10 Flash Player 11 インストール

  1. 以下のサイトからインストール媒体(flash_player_11_solaris_x86.tar.bz2 )をダウンロードする。
    http://get.adobe.com/jp/flashplayer/
  2. ダウンロードした媒体を解凍する。
    # bunzip2 flash_player_11_solaris_x86.tar.bz2
    # tar xvf flash_player_11_solaris_x86.tar
    flash_player_solaris_11_2_202_223_x86/
    flash_player_solaris_11_2_202_223_x86/libflashplayer.so
  3. 解凍したlibflashplayer.soを、firefoxの所定のプラグインディレクトリにコピーする。
    # mkdir  /usr/lib/firefox3.5.3/plugins
    # cp flash_player_solaris_11_2_202_223_x86/libflashplayer.so /usr/lib/firefox3.5.3/plugins
    # ls -l /usr/lib/firefox3.5.3/plugins/libflashplayer.so

2012年4月9日月曜日

You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.8.7

rakeのバージョン不一致が原因。
新バージョンのrakeをアンインストールして、古いバージョンものをインストールする。

$ gem uninstall rake --version 0.9.2.2
Successfully uninstalled rake-0.9.2.2

$ gem install rake --version 0.8.7
Successfully installed rake-0.8.7
1 gem installed
Installing ri documentation for rake-0.8.7...
Installing RDoc documentation for rake-0.8.7...

2012年4月8日日曜日

OpenAM10.0 OAuth2.0を使ってみる

OpenAM10.0が提供するConsumer機能を使用してみる(現時点では、OpenAMにOP機能は提供されていない)。
連携先のOPは、Facebookを使用する。
①OpenAMにおいて、アカウント"taro"を作成する。
※Facebookとのアカウントの連携は、メールアドレスを利用して実施する。そのため、作成したアカウントには、facebook側のメールアドレスを必ず設定する必要がある。

②以下のURLにアクセスし、ConsumerとしてOpenAMのURLを登録する。このとき、自動作成されたAPPキーとAPPシークレットをメモしとく。
https://developers.facebook.com/apps


③OpenAMの管理コンソールにログインする。次に、「アクセス制御」タブを押下する。

④「/(最上位のレルム)」を押下し、「認証」タブを押下する。次に、「モジュールインスタンス 」において、「新規」ボタンを押下する。
⑤「新規モジュールインスタンス」において、以下の値を入力する。「了解」を押下する。
・名前:任意の値(例.facebook)
・タイプ:OAuth2.0

⑥「/(最上位のレルム)ー認証」の「モジュールインスタンス 」において、作成した認証モジュール"facebook"を押下する。以下の値を入力する。「保存」を押下する。
・Client Id:②で取得したAPPキーを入力。
・Client Secret:②で取得したAPPシークレットを入力。
・Proxy URL:環境に合わせて、URLを修正する。
例.http://openam.yasuyasu.com:48080/openam/oauth2.0c/OAuthProxy.jsp
※上記以外の項目は、デフォルトのままで動作した。

⑦認証モジュールにfacebookを明に指定して、OpenAMの管理コンソールにログインする。
http://openam.yasuyasu.com:48080/openam/?module=facebook

⑧facebookの認証画面が表示されるため、ログインする。

⑨ニュースフィードへのアクセスを求める同意画面が表示されるため、「認可する」を押下する。

⑩OpenAMのパスワード確認画面が表示されるため、入力する。「Submit」を押下する。
※最初のアクセスのみ表示される。2回目以降のアクセスでは、アカウントが連携されているため、画面は表示されない。
  

⑪作成したユーザ情報が表示されることを確認する。






OpenAM10.0 REST APIを使用してみる

OpenAM10.0では、以下のRESTなAPIを提供する。


REST Operation
URL
Parameters
Response
認証要求
http://localhost:8080/
opensso/identity/authenticate
username
password
uri
subjectid
認証トークンの検証
http://localhost:8080/
opensso/identity/isTokenValid
tokenid
boolean
ログアウト
http://localhost:8080/
opensso/identity/logout
subjectid
void
認可要求
http://localhost:8080/
opensso/identity/authorize
uri
action
subjectid
boolean
ログ要求
http://localhost:8080/
opensso/identity/log
appid
subjectid
logname
message
void
属性検索
http://localhost:8080/
opensso/identity/search
filter
attributes_names
attribute_values_attributename
identitydetails
属性取得
http://localhost:8080/
opensso/identity/attributes
attributes_names
subjectid
userdetails
Read
http://localhost:8080/
opensso/identity/read
name
attributes_names
admin
identitydetails
属性作成
http://localhost:8080/
opensso/identity/create
identity_name
identity_attribute_names
identity_attribute_values_attributename
admin
void
属性更新
http://localhost:8080/
opensso/identity/update
identity_name
identity_attribute_names
identity_attribute_values_attributename
admin
void
属性削除
http://localhost:8080/
opensso/identity/delete
identity_name
admin
void
【使用例】
①認証要求
http://openam.yasuyasu.com:48080/openam/identity/authenticate?username=amadmin&password=ampassword









②認証トークンの検証
http://openam.yasuyasu.com:48080/openam/identity/isTokenValid?tokenid=AQIC5wM2LY4SfcyDOrkYBnVe87y1F2kTCoU6ipf8gsGcsG4.*AAJTSQACMDE.*









2012年4月7日土曜日

OpenAM10.0 インストール手順

OpenAM10.0のインストール手順について説明する。
なお、WebサーバはGlassfish V2を使用する。
※インストール/設定手順は、OpenAM9.X系とほぼ同じ。

①Glassfishにおいて、domainを作成する。
c:\glassfish>asadmin create-domain --adminport 44848 --instanceport 48080 --save
masterpassword=true --savelogin=true openam10

②作成したdomainを起動する。
c:\glassfish>asadmin start-domain openam10

③以下のサイトからダウンロードしたOpenAM10のZIPファイルを解凍する。解凍後、deployable-warフォルダ配下にあるopensso.warをopenam.warに変名し、Glassfishのautodeployフォルダに配置する。
http://www.forgerock.org/openam.html

④以下のURL(OpenAM設定画面)にアクセスする。
http://openam.yasuyasu.com:48080/openam

⑤「カスタム設定」の「新しい設定の作成」を押下する。











⑥「手順1:一般」において、デフォルトユーザーのパスワードを入力する。「次へ」を押下する。













⑦「手順 2: サーバー設定」において、サーバ情報を設定する。「次へ」を押下する。













⑧「手順 3: 設定データストア設定」において、設定データを格納するデータストアを設定する。「次へ」を押下する。














⑨「手順 4: ユーザーデータストア設定」において、ユーザデータを格納するデータストアを設定する。ここでは、OpenAM付属のデータストア(OpenDJ)を使用する。「次へ」を押下する。















⑩「手順 5: サイト設定」において、ロードバランサの設定を行う。負荷分散は行わないため、そのまま「次へ」を押下する。










⑪「手順 6: デフォルトのポリシーエージェントユーザー」において、デフォルトのポリシーエージェントのパスワードを設定する。OpenAMの管理パスワードと異なるものを設定する必要があることに注意。「次へ」を押下する。










⑫「設定ツールの概要と詳細」において、「設定の作成」ボタンを押下する。OpenAMの設定が開始される。












⑬設定が完了後、「ログインへ進む」リンクを押下する。















⑭以下の画面が表示されることを確認する。














⑮管理ユーザのID/PWを入力し、OpenAMにログインできることを確認する。また、バージョンがOpenAM10であることを確認する。



2012年4月4日水曜日

SAML 2.0 Session Token Profile 1.0


セッション管理を行う運用において、IdPSP側のセッション情報を管理するケースで使用する。
(Session Tokenのフォーマットを規定しており、Session TokenはSAMLアサーション形式になる)

IdPにおいて、SP向けのSession Tokenを発行して、SPではそのままこのSession Tokenを利用して、セッションを確立する。
このSession Token内の属性ステートメントには、セッションを管理するための情報(セッションIDやセッションの有効時間など)が含まれる。

■SAMLアサーションの例
(太字箇所がセッションに関連する情報)

<saml:Assertion ID="_a75e1c55-01d7-40cc-929f-d627c72ebdfc"
   IssueInstant="2010-11-25T13:16:02Z" Version="2.0"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
    xmlns:xs=”http://www.w3.org/2001/XMLSchema”
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
  <saml:Issuer>sessionauthority.example.com</Issuer>
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
      <ds:CanonicalizationMethod
        Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      <ds:SignatureMethod
        Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha256"/>
      <ds:Reference URI="#_a75e1c55-01d7-40cc-929f-d627c72ebdfc">
        <ds:Transforms>
          <ds:Transform
            Algorithm="http://www.w3.org/2000/09/xmldsig#envelopedsignature"/>
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
            <InclusiveNamespaces PrefixList="#default saml ds xs xsi"
              xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          </ds:Transform>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
        <ds:DigestValue>Kcl ... </ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue> ... </ds:SignatureValue>
    <ds:KeyInfo>
      <ds:KeyName>SessionKey003<ds:KeyName/>
    </ds:KeyInfo>
  </ds:Signature>
  <saml:Subject>
    <saml:NameID NameQualifier="Repository6">John.Smith</NameID>
    <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"
      <saml:SubjectConfirmationData Address="192.168.1.2"
    </saml:SubjectConfirmation>
  </saml:Subject>
  <saml:Conditions NotBefore="2010-11-25T13:16:02Z"
    NotOnOrAfter="2010-11-25T13:20:02Z">
  </saml:Conditions>
  <saml:AuthnStatement AuthnInstant="2010-11-25T13:15:13Z">
    <saml:AuthnContext>
      <saml:AuthnContextClassRef>
          urn:oasis:names:tc:SAML:2.0:ac:classes:Password
      </saml:AuthnContextClassRef>
    </saml:AuthnContext>
  </saml:AuthnStatement>
  <saml:AttributeStatement>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
      Name="urn:oasis:names:tc:SAML:2.0:profiles:session:sessionId"
      xsi:type="xs:string" >
        258673
    </saml:Attribute>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
 Name="urn:oasis:names:tc:SAML:2.0:profiles:session:AuthenticationStrength"
      xsi:type="xs:integer" >
        20
    </saml:Attribute>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
    Name="urn:oasis:names:tc:SAML:2.0:profiles:session:TimeLastActive"
    xsi:type="xs:dateTime" >
        2010-11-25T13:16:02Z
    </saml:Attribute>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
  Name="urn:oasis:names:tc:SAML:2.0:profiles:session:TokenFormatVersion"
      xsi:type="xs:string" >
       1.0
    </saml:Attribute>
  </saml:AttributeStatement>
</saml:Assertion>

SAML2.0 Attribute Predicate Profile 1.0


IdPからSPにユーザの個人情報(実際の属性の値)を通知したくないという前提で、SPが、特定のユーザに対して、ある条件を満たしているかをIdPに問い合わせするプロファイルである。
(SP側で、個人情報の取り扱い違反における賠償請求を回避するのがプロファイルの主な目的)

例えば、SP側でチャットサービスを運用しているケースにおいて、ある利用者が18歳以上かをチェックしたい場合に、IdPに対して利用者が18歳以上かをXACML仕様を使用して問い合わせすることができる。
(IdPからSPに対しては、実際の利用者の年齢を通知しない)

2012年4月1日日曜日

OpenAM 10.0 OAuth2.0について

OpenAM10.0がOAuth2.0をサポートしているとのことなので調べてみた。

(参照URL)
https://wikis.forgerock.org/confluence/display/openam/OAuth+2.0+Authentication+%28Facebook%2C+Google%2C+MSN%2C+etc%29

調査した結果、以下のことが判明した。
・現時点では、OPの機能はサポートしておらず、Consumer側のみをサポートしている。
・OPとしては、Google、Facebook、MNSの名前が挙がっていた(左記のOPには確実に連携できる?)。
・今後も、バージョンアップされる模様。

(OAuth2.0 フロー)