永続フェデレーション・データ・ストア

フェデレーションSSO操作では、ユーザーはSSOメッセージの一意の識別子によって識別され、その後SPによってローカル・ユーザーのプロファイルにマップされます。

一意の識別子が、電子メール・アドレスやユーザー名などの既存のLDAPユーザー・レコードの属性部分である場合もありますが、それ以外の場合は、特定のユーザーのSPとIdP間のフェデレーションSSO操作にのみ識別子が存在します。後者の場合、識別子と添付するユーザーは、フェデレーション・データ・ストアにアカウント・リンク情報として格納する必要があります。

この記事では、フェデレーション・データ・ストアとしてRDBMSを使用するようにOAMを構成する方法を示します。

重要なノート: 永続フェデレーション・データ・ストアは、SSOレスポンスで使用される識別子(SAML 2.0の永続NameIDなど)が使用される場合にのみ必要です。不要な場合は、永続的なフェデレーション・データ・ストアを使用しないことをお薦めします。

フェデレーション・メッセージの識別子

各フェデレーション・プロトコルでは、バリエーションと違いがありますが、識別子を使用してSSOメッセージでユーザーを参照します。

SAML 2.0

SAML 2.0では、次の3種類の識別子を使用します。

ノート: OAMをIdPとして使用すると、永続NameID形式を使用し、式に基づいて値を移入できます。他のNameID形式を使用する場合も同様です。SPパートナ画面の永続NameIDフォーマットのNameID値フィールドが入力されている場合、IdPはその式を使用してNameID値を設定します。

IdPによって発行された、電子メール・アドレスNameIDのアサーションの例を次に示します:

<samlp:Response ...>
    <saml:Issuer ...>https://idp.com/oam/fed</saml:Issuer>
    <samlp:Status>
        <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
    </samlp:Status>
    <saml:Assertion ...>
        <saml:Issuer ...>https://idp.com/oam/fed</saml:Issuer>
        <dsig:Signature>
            ...
        </dsig:Signature>
        <saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameidformat:emailAddress">bob@oracle.com</saml:NameID>             <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <saml:SubjectConfirmationData .../>
            </saml:SubjectConfirmation>         </saml:Subject>
        <saml:Conditions ...>
            <saml:AudienceRestriction>
                <saml:Audience>https://acme.com/sp</saml:Audience>
            </saml:AudienceRestriction>
        </saml:Conditions>
        <saml:AuthnStatement AuthnInstant="2014-03-21T20:53:55Z" SessionIndex="id6i-Dm0yB-HekG6cejktwcKIFMzYE8Yrmqwfd0azz"
SessionNotOnOrAfter="2014-03-21T21:53:55Z">
            <saml:AuthnContext>
                <saml:AuthnContextClassRef>
                       urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
                </saml:AuthnContextClassRef>
            </saml:AuthnContext>
        </saml:AuthnStatement>     </saml:Assertion> </samlp:Response>

永続NameIDを持つIdPによって発行されたアサーションの例を次に示します。

 <samlp:Response ...>
     <saml:Issuer ...>https://idp.com/oam/fed</saml:Issuer>
     <samlp:Status>
         <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
     </samlp:Status>
     <saml:Assertion ...>
         <saml:Issuer ...>https://idp.com/oam/fed</saml:Issuer>
         <dsig:Signature>
             ...
         </dsig:Signature>
         <saml:Subject>
 <saml:NameID NameQualifier="https://idp.com/oam/fed SPNameQualifier="https://acme.com/sp" Format="urn:oasis:names:tc:SAML:2.0:nameidformat:persistent">id-424129fa23490ded8eab00cc</saml:NameID>
             <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                 <saml:SubjectConfirmationData .../>
             </saml:SubjectConfirmation>
         </saml:Subject>
         <saml:Conditions ...>
             <saml:AudienceRestriction>
                 <saml:Audience>https://acme.com/sp</saml:Audience>
             </saml:AudienceRestriction>
         </saml:Conditions>

 <saml:AuthnStatement AuthnInstant="2014-03-21T20:53:55Z"
 SessionIndex="id-6i-Dm0yB-HekG6cejktwcKIFMzYE8Yrmqwfd0azz"
 SessionNotOnOrAfter="2014-03-21T21:53:55Z">
             <saml:AuthnContext>
                 <saml:AuthnContextClassRef>
                        urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
                 </saml:AuthnContextClassRef>
             </saml:AuthnContext>
         </saml:AuthnStatement>
     </saml:Assertion>
 </samlp:Response>

SAML 1.1

SAML 1.1では、ユーザー属性はNameIDsとしてのみ使用されます。

SAML 1.1に永続フェデレーション・データ・ストアを使用する必要はありません

IdPによって発行された、電子メール・アドレスNameIDのアサーションの例を次に示します:

<samlp:Response>
    <samlp:Status>
        <samlp:StatusCode Value="samlp:Success"/>
    </samlp:Status>
    <saml:Assertion Issuer="https://idp.com/oam/fed" ...>
        <saml:Conditions ...>
            <saml:AudienceRestriction>
                <saml:Audience>https://acme.com/sp/ssov11</saml:Audience>
            </saml:AudienceRestriction>
        </saml:Conditions>
        <saml:AuthnStatement AuthenticationInstant="2014-03-21T20:53:55Z"
AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password">
            <saml:Subject>
<saml:NameIdentifier Format="urn:oasis:names:tc:SAML:1.1:nameidformat:emailAddress">bob@oracle.com</saml:NameIdentifier>
                <saml:SubjectConfirmation>
                   <saml:ConfirmationMethod>
                       urn:oasis:names:tc:SAML:1.0:cm:bearer
                   </saml:ConfirmationMethod>
                </saml:SubjectConfirmation>
            </saml:Subject>
        </saml:AuthnStatement>
        <dsig:Signature>
            ...
        </dsig:Signature>     </saml:Assertion>
</samlp:Response>

OpenID 2.0

OpenID 2.0では、NameIDsとしてランダムな永続識別子のみが使用されます。

IdPによって発行されたOpenID SSOレスポンスの例を次に示します。

https://acme.com/openid?reCd=id-9PKVXZmRxAeDYcgLqPm36ClzOMA-&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fidp.com%2Fopenid&openid.claimed_id=https%3A%2F%2Fidp.com%2Fopenid%3Fid%3Did-38iCmmlAVEXPsFjnFVKArfn5RIiF75D5doorhEgqqPM%3D&openid.identity=https%3A%2F%2Fidp.com%2Fopenid%3Fid%3Did-38iCmmlAVEXPsFjnFVKArfn5RIiF75D5doorhEgqqPM%3D&openid.return_to=https%3A%2F%2Facme.com%2Fopenid%3FreCd%3Did9PKVXZmRxAeDYcgLqPm36ClzOMA-&openid.response_nonce=2014-03-24T19%3A20%3A06ZidYPa2kTNNFftZkgBb460jxJGblk2g--iNwPpDI7M1&openid.assoc_handle=id6a5S6zhAKaRwQNUnjTKROREdAGSjWodG1el4xyz3&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.ax.mode=fetch_response&openid.ax.type.attr0=http%3A%2F%2Fsession%2Fcount&openid.ax.value.attr0=1&openid.ax.type.attr1=http%3A%2F%2Fopenid.net%2Fschema%2FnamePerson%2Ffriendly&openid.ax.value.attr1=My+name+is+Bobby+Smith&openid.ax.type.attr2=http%3A%2F%2Fschemas.openid.net%2Fax%2Fapi%2Fuser_id&openid.ax.value.attr2=bob&openid.ax.type.attr3=http%3A%2F%2Faxschema.org%2Fcontact%2Femail&openid.ax.value.attr3=bob%40oracle.com&openid.ax.type.attr4=http%3A%2F%2Fsession%2Fipaddress&openid.ax.value.attr4=10.145.120.253&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.auth_time=2014-03-24T19%3A20%3A05Z&openid.pape.auth_policies=http%3A%2F%2Fschemas.openid.net%2Fpape%2Fpolicies%2F2007%2F06%2Fphishing-resistant&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle%2Cns.ax%2Cax.mode%2Cax.type.attr0%2Cax.value.attr0%2Cax.type.attr1%2Cax.value.attr1%2Cax.type.attr2%2Cax.value.attr2%openid.sig=mYMgbGYSs22l8e%2FDom9NRPw15u8%3D

フェデレーション・データ・ストア

前述のように、次のユースケースにはフェデレーション・データ・ストアが必要です。

フェデレーション・データ・ストアは、次のもので構成されるアカウント・リンク情報を格納するために使用されます。

IdP

IdPとして、ユーザーがIdPとSPの間でフェデレーションSSO操作を初めて実行したときにランダムに生成された一意の不透明な識別子を送信するには、フェデレーション・データ・ストアが必要です。

OAMは、SAML 2.0永続NameID形式およびOpenID 2.0の一意の不透明な識別子を送信できます。これは、次のSHA-256ハッシュになります。

この機能により、フェデレーション・データ・ストアを有効にすることなく、SAML 2.0永続NameID形式およびOpenID 2.0を使用できます(OAMの構成方法は後述の説明を参照)。

SP

SPとして、受信SSOレスポンスがSSOレスポンス/ユーザー属性を介してマップされていない場合は、フェデレーション・データ・ストアが必要です。この場合、SPが操作を正常に完了できるようにするには、アカウント・リンク情報がフェデレーション・データ・ストアに存在する必要があります。アカウント・リンク情報が存在しない場合、SPは、そのアイデンティティを決定し、フェデレーション・データ・ストア(ユーザー+不透明識別子+ IdP ProviderID)にアカウント・リンク情報を作成するために、ユーザーをローカルでチャレンジおよび認証する必要があります。

SPでのフローは次のようになります。

フェデレーション・データ・ストアを使用するためのOAMの構成

デフォルトでは、OAMは永続的なフェデレーション・データ・ストアを使用するように構成されていません。したがって、次の場合にエラーがスローされます。

ノート: 前述のように、IdPは、userIDおよびSPのProviderIDのSHA-256ハッシュに基づいて不透明な値をOpenID 2.0およびSAML 2.0永続NameIDに移入するように構成できるため、フェデレーション・データ・ストアは必要ありません。この詳細は、次の項を参照してください。

RDBMS

サポートされている唯一のフェデレーション・データ・ストアはRDBMSで、OAMスキーマが存在し、RDBMSをWLSサーバーのJDBCデータソースとして定義する必要があります。

OAMは実行中です

ORAFEDPROVIDERFEDデータベース表には、アカウント・リンク情報のエントリが含まれています。

ノート: フェデレーション・データ・ストアに格納する必要があるのは、OpenID 2.0およびSAML 2.0永続NameIDの値のみです

構成

フェデレーション・データ・ストアを使用するようにOAMを構成するには、次のステップを実行します。

  1. $IAM_ORACLE_HOME/common/bin/WLST.sを実行して、WLST環境を入力します。

  2. WLS管理サーバー(connect())に接続します。

  3. ドメイン・ランタイム・ブランチdomainRuntime()に移動します

  4. setFederationStore WLSTコマンドsetFederationStore(enable, jndiname="jdbc/oamds")を実行します。

  5. フェデレーション・データ・ストアを有効にするには:

    1. 有効をtrueに設定

    2. 使用するJDBCデータソースを参照するオプションのjndinameパラメータを設定します。欠落している場合は、OAM JDBCデータソースが使用されます。

  6. 例: setFederationStore("true")

  7. フェデレーション・データ・ストアを無効にするには:

    1. 有効をtrueに設定

      例: setFederationStore("false")

  8. WLST環境を終了します: exit()

OAMでのIdPとしてのテスト

このテストでは、OAMはSAML 2.0 SPパートナを使用してIdPとして機能します。

LDAPユーザー属性を使用してNameID値を移入するかわりに、フェデレーション・データ・ストアに格納する必要があるランダムな永続識別子を生成するようにIdPを構成するには、次のステップを実行します。

  1. $IAM_ORACLE_HOME/common/bin/WLST.shを実行して、WLST環境を入力します。

  2. WLS管理サーバー(connect())に接続します。

  3. ドメイン・ランタイム・ブランチdomainRuntime()に移動します

  4. setSPSAMLPartnerNameID WLSTコマンドsetSPSAMLPartnerNameID(partnerName, nameIDFormat, nameIDValue="", customFormat="", nameIDValueComputed="false")を実行します。

    1. partnerNameはSPパートナ名です

    2. nameIDFormatは、orafed- persistentに設定されます。

    3. nameIDValueは空のままになります。空でない場合、IdPは、ランダムな永続識別子を生成するのではなく、式を使用してNameID値を移入します

  5. 例: setSPSAMLPartnerNameID("acmeSP", "orafed-persistent")

  6. WLST環境を終了します: exit()

空のORAFEDPROVIDERFED表で次のSQL問合せを実行すると、データは返されません。

SQL> select idpProvidedNameIDValue, providerID, userID, federationType, idpProvidedNameIDVersionString, userDescription, fedID from ORAFEDPROVIDERFED

IDPPROVIDE PROVIDERID USERID FEDERATIONTYPE IDPPROVID USERDESC FEDID

リモート・パートナSPでフェデレーションSSOを実行した後、問合せを再度実行すると、新しいエントリが表示されます。

SQL> select idpProvidedNameIDValue, providerID, userID, federationType, idpProvidedNameIDVersionString, userDescription, fedID from ORAFEDPROVIDERFED
IDPPROVIDEプロバイダID USERID フェデレーション・タイプ IDPPROVID ユーザー摘要FEDID
ID: s-l3991 http://acme.c oud- e2e:USER: 1 SAML2.0 アリス id-KKqR2Cl
Ut7JEyggvf om/sp cn= alice、ou= u GnUAGhRLA  
IoPavO7Huj   sers、dc= us、dc MzXZMx3UGj  
6H0UvFvEec = oracle、dc= co   cMSQge9Nhh  
WWQ m:alice NME    

SPとしてのOAMのテスト

このテストでは、OAMはSAML 2.0 IdPパートナを持つSPとして機能します。

受信SAML 2.0/OpenID 2.0 SSOレスポンスをマッピングするときにフェデレーション・データ・ストアを使用するようにOAM/SPを構成するには、次のステップを実行します。

  1. $IAM_ORACLE_HOME/common/bin/WLST.shを実行して、WLST環境を入力します。

  2. WLS管理サーバー(connect())に接続します。

  3. ドメイン・ランタイム・ブランチdomainRuntime()に移動します

  4. setPartnerIDStoreAndBaseDN WLSTコマンドsetPartnerIDStoreAndBaseDN(partnerName, partnerType, storeName="", searchBaseDN="", delete="false")を実行します。

    1. partnerNameは、IdPパートナ名になります。

    2. partnerTypeはidpに設定されます

    3. storeNameFederationStoreに設定されます

    4. searchBaseDNおよび削除は設定されません

      次に例を示します。

  5. setPartnerIDStoreAndBaseDN("acmeIdP", "idp", "FederationStore")
    
  6. WLST環境を終了します: exit()

重要: OAM/SPが、フェデレーション・データ・ストアでSAML 2.0永続NameIDまたはOpenID 2.0を使用してIdPパートナでフェデレーションSSOを実行する場合、ユーザーの情報をリンクするアカウントがまだ存在しない場合、OAM/SPは、そのアカウント・リンク情報エントリを作成できるように、ユーザーをローカルでチャレンジおよび認証する必要があります。以降は、アカウント・リンク情報エントリがすでに存在するため、そのユーザーはチャレンジされなくなります。

空のORAFEDPROVIDERFED表で次のSQL問合せを実行すると、データは返されません。

SQL> select idpProvidedNameIDValue, providerID, userID, federationType, idpProvidedNameIDVersionString, userDescription, fedID from ORAFEDPROVIDERFED

IDPPROVIDE PROVIDERID USERID FEDERATIONTYPE IDPPROVID USERDESC FEDID

リモート・パートナIdPでフェデレーションSSOを実行した後、ユーザーがローカルで認証してアカウント・リンク情報エントリを作成できるようにした後、問合せを再度実行すると、新しいエントリが表示されます。

SQL> select idpProvidedNameIDValue, providerID, userID, federationType, idpProvidedNameIDVersionString, userDescription, fedID from ORAFEDPROVIDERFED
アイドプロバイド プロバイダID USERID フェデレーション・タイプ IDPPROVID ユーザー摘要 フェディッド
id-2eCUlO4 http://acme.c oud- e2e:USER: 3 SAML2.0 アリス id-VVSIks6  
gekO2rgZfe om/idp cn= alice、ou= u   hzG2szNPyI    
YoZkof8YUM   sers、dc= us、dc   T5ccRf8dzy    
  = oracle、dc= co   NL0DZjDbGg      
  m:alice   c-0      

名前としてハッシュを使用するためのIdPの構成

OAMが、LDAPユーザー属性ではなく不透明な識別子に基づいてSAML 2.0永続NameIDまたはOpenID 2.0、あるいはその両方を使用してIdPとして機能する場合、次のデータのSHA-256ハッシュに基づいてNameIDに移入するようにサーバーを構成できます。

前述のデータのSHA-256ハッシュを使用してNameIDに移入するようにIdPを構成するには、次のステップを実行します。

  1. $IAM_ORACLE_HOME/common/bin/WLST.shを実行して、WLST環境を入力します。

  2. WLS管理サーバー(connect())に接続します。

  3. ドメイン・ランタイム・ブランチdomainRuntime()に移動します

  4. setSPSAMLPartnerNameID WLSTコマンドsetSPSAMLPartnerNameID(partnerName, nameIDFormat, nameIDValue="", customFormat="", nameIDValueComputed="false")を実行します。

    1. partnerNameはSPパートナ名です

    2. nameIDFormatは、orafed- persistentに設定されます。

    3. nameIDValueは空のままになります。空でない場合、IdPは、ランダムな永続識別子を生成するのではなく、式を使用してNameID値を移入します

    4. nameIDValueComputedはtrueに設定されます

      例: setSPSAMLPartnerNameID("acmeSP", "orafed-persistent", nameIDValueComputed="true")

  5. WLST環境を終了します: exit()

このように、フェデレーションSSOを次のように実行するために、フェデレーション・データ・ストアを使用するようにIdPを構成する必要はありません(フェデレーション・データ・ストアとしてDBを有効にするには、setFederationStore("true")を実行する必要はありません)。

その他の学習リソース

docs.oracle.com/learnで他のラボを探すか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。