OAM 和 SP 中的 JIT 使用者佈建
本文探討如何將使用者佈建新增至 OAM/SP,如果使用者還沒有帳戶,則可讓伺服器在 Federation SSO 期間快速建立使用者記錄。
在「聯合 SSO」作業期間,OAM/SP 會驗證內送 SSO 回應 (SAML 或 OpenID),並嘗試根據 SSO 回應中包含的資訊將它對應至本機 LDAP 使用者記錄 (通常是使用者屬性):
-
如果對應傳回單一使用者記錄,則作業成功,並為該使用者記錄建立 OAM 階段作業
-
如果對應傳回數個 LDAP 記錄,則作業為無法復原的失敗:
- 對應組態不正確
- 或者目錄中有無效的 LDAP 使用者記錄
-
如果對應未傳回任何記錄,這表示
-
對應組態不正確
-
或者組態正確,但使用者在本端目錄中沒有記錄。在此情況下,您可以設定 OAM/SP,根據 SSO 回應中所含的資料自動建立 LDAP 使用者記錄,並確保該使用者的後續「聯合 SSO」對應作業對應至相同的新 LDAP 使用者記錄
OAM/SP 會驗證 SSO 回應、使用 IdP 夥伴之 IdP 屬性設定檔中定義的規則來處理屬性,並視需要呼叫 OAM/SP 中設定的「使用者佈建」模組:
-
包含的「使用者啟動設定」模組
-
或「使用者啟動設定」模組的自訂實行
呼叫「使用者啟動設定」模組 (預設或自訂) 之後,伺服器會為使用者建立階段作業。相同使用者的後續聯合 SSO 作業會導致 OAM/SP 對應 SSO 回應至該新建立的 LDAP 記錄。
內建使用者佈建模組
內建的「使用者啟動設定」模組可在對應失敗時,在 LDAP 目錄中建立使用者記錄:
-
如果未指定,請使用 IdP 夥伴項目中指定的「識別存放區」或預設的「OAM 識別存放區」
-
若未指定,則使用 IdP 夥伴項目中指定的「使用者基準 DN」,或使用之「識別存放區」的「使用者基準 DN」
-
根據 SAML/OpenID SSO 回應中包含的屬性建立
userID
的使用者記錄: -
「使用者啟動設定」模組組態會指出要作為
userID
的屬性 (例如 foo) -
在 IdP 屬性設定檔處理這些屬性之後 (例如,模組會從 SSO 回應尋找已處理屬性清單中的 foo 屬性),模組會嘗試在 SSO 回應的屬性清單中找出該屬性
-
如果屬性不在 SSO 回應的屬性清單中,則模組會評估 IdP 合作夥伴項目中指定的對應規則:如果對應規則使用
userID
屬性,則會使用將資料對應為userID
(例如,如果「SAML 宣告」是透過 NameID 對應至使用 foo LDAP 屬性的 LDAP 使用者記錄,則模組會使用 NameID 值作為userID
) -
或者「使用者啟動設定」模組組態未指示要使用哪一個屬性作為
userID
,或者如果上述流程之後無法判斷userID
屬性,則模組會查看「識別存放區」組態來決定 userID 屬性 (例如 uid),並遵循上述程序。 -
在 IdP 屬性設定檔處理這些屬性之後 (例如,模組會從 SSO 回應尋找已處理屬性清單中的 uid 屬性),模組會嘗試從 SSO 回應尋找屬性清單中的該屬性
-
如果屬性不在 SSO 回應的屬性清單中,則模組會評估 IdP 合作夥伴項目中指定的對應規則。如果對應規則使用
userID
屬性,則會使用對應的資料作為userID
(例如,如果 SAML 宣告是透過 NameID 對應至使用 uid LDAP 屬性的 LDAP 使用者記錄,則模組會使用 NameID 值作為userID
) -
如果仍無法判斷
userID
屬性 (因為 uid 不在 IdP 所傳送的屬性清單中,因此模組會嘗試使用 NameID 值作為userID
-
如果有的話
-
否則會發生錯誤,因為「使用者啟動設定」模組無法選取
userID
值。
重要備註:上述演算法有點複雜,但允許管理員
-
在 POC 中測試使用者佈建,而不需執行多個組態步驟,以及根據管理員的需求設定使用者佈建模組。
-
建立使用者記錄之後,「使用者佈建」模組會根據下列項目,在使用者記錄上設定屬性:
-
應設定的屬性清單:這由管理員設定的模組組態指示,該組態會從設定 SSO 回應指定屬性清單
-
對應規則中所列的屬性:會在 LDAP 使用者記錄中自動設定 IdP Partner 項目之對應規則中所列的屬性,以確保下次具有相同 SSO 回應的使用者執行搭配 OAM/SP 的聯合 SSO 時,對應功能。
在 OAM/SP 中啟用使用者佈建
執行下列步驟以在 OAM/SP 中啟用 / 停用使用者佈建:
-
執行下列動作以輸入 WLST 環境:
$IAM_ORACLE_HOME/common/bin/wlst.sh
-
連線「WLS 管理」伺服器:
connect()
-
瀏覽至「網域程式實際執行」分支:
domainRuntime()
-
將
userprovisioningenabled
特性更新為: -
在 OAM/SP 中啟用使用者佈建:
putBooleanProperty("/fedserverconNg /userprovisioningenabled", "true")
-
停用 OAM/SP 中的使用者佈建:
putBooleanProperty("/fedserverconNg /userprovisioningenabled", "false")
- 結束 WLST 環境:exit()
測試設定
使用先前設定的相同 SAML 2.0 聯合設定,其中:
-
OAM 作為服務提供者
-
IdP (
AcmeIdP
) 會傳送「SAML 宣告」-
NameID 設為
userID
-
傳送的屬性:
-
email
已設為使用者的電子郵件地址 -
fname
已設為使用者的first name
-
surname
已設為使用者的last name
-
title
已設為使用者的last job title
-
-
-
使用 IdP 屬性設定檔設定的 OAM/SP
-
將
fname
對應至givenname
-
將
surname
對應至sn
-
將
email
對應至mail
-
使用者演算法用於 IdP,而 OAM/SP 沒有使用者帳戶存在:
userID
:別名email
:alice@oracle.comfirst name
:愛麗絲last name
:Appletontitle
:管理程式
-
在與遠端 IdP 夥伴進行 SAML 2.0 同盟 SSO 時,由 IdP 傳送之宣告的「XML SAML 回應」會是:
<samlp:Response ..>
<saml:Issuer ...>http://acme.com/idp</saml:Issuer>
<samlp:Status>
<samlp:StatusCode
Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion ...>
<saml:Issuer ...>http://acme.com</saml:Issuer>
<dsig:Signature ...>
...
</dsig:Signature>
<saml:Subject>
<saml:NameID ...>alice</saml:NameID>
...
</saml:Subject> <saml:Conditions ...>
...
</saml:Conditions> <saml:AuthnStatement ...>
...
</saml:AuthnStatement>
<saml:Attributestatement ...>
<saml:Attribute Name="email" ...>
<saml:AttributeValue
...>alice@oracle.com</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="title" ...>
<saml:AttributeValue
...>manager</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="surname" ...>
<saml:AttributeValue
...>Appleton</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute Name="fname" ...>
<saml:AttributeValue
...>Alice</saml:AttributeValue>
</saml:Attribute>
</saml:Attributestatement>
</saml:Assertion>
</samlp:Response>
OAM/SP 處理 SAML 2.0 宣告的結果顯示轉換的屬性以及 NameID
測試案例
測試案例會顯示「使用者佈建」模組的不同組態,而使用者對 OAM/SP 不存在於每次測試之前:
使用案例 #1:
-
無使用者佈建模組組態
-
對應規則是透過 NameID 完成至 LDAP
uid
屬性
使用案例 #2:
-
無使用者佈建模組組態
-
對應規則是透過 SAML 屬性郵件至 LDAP 郵件屬性來完成
使用案例 #3:
-
對應規則是透過 NameID 完成至 LDAP
uid
屬性 -
設定為設定
givenname
、sn
和郵件屬性的使用者啟動設定模組
使用案例 #4:
-
對應規則是透過 SAML 屬性郵件至 LDAP 郵件屬性來完成
-
設定為使用
givenname
作為userID
的「使用者啟動設定」模組
使用案例 #5:
-
對應規則是透過 SAML 屬性郵件至 LDAP 郵件屬性來完成
-
設定為使用 NameID 作為
userID
的「使用者啟動設定」模組 -
設定
givenname
和sn
屬性
在每個 Federation SSO 作業之後,列印所建立使用者的 LDAP 使用者記錄,接著在下次測試之前刪除該記錄。
重要注意事項:IdP 屬性設定檔必須將內送「SAML 屬性」名稱對應至 LDAP 目錄中使用的屬性名稱。這就是我們的測試 IdP 屬性設定檔
fname
對應至givenname
的原因。內建的「使用者啟動設定」Plugin 會從已處理屬性清單中取得屬性名稱,然後將它們新增到 LDAP 使用者記錄 (如果設定為這樣做):沒有其他屬性名稱對應。
使用案例 #1
在此使用案例中,設定如下:
-
無使用者佈建模組組態
-
對應規則是透過 NameID 完成至 LDAP
uid
屬性
同盟 SSO 之後,建立別名的使用者記錄:
dn: uid=alice,ou=users,dc=us,dc=oracle,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: alice
cn: alice
sn: alice
LDAP 使用者記錄具有下列特性:
-
UserID
:-
沒有「使用者啟動設定」模組組態
-
如果使用者識別存放區
UserID
(測試中的uid
) 是 IdP 所傳送的屬性,則檢查「使用者啟動設定」模組:不是此情況 -
「使用者啟動設定」模組使用 NameID 作為
userID
(儲存在 LDAPuid
屬性中):uid
設為 alice
-
-
額外屬性 :
-
「使用者啟動設定」模組設定對應規則中使用的屬性:NameID 已對應至
uid
。此屬性已設定 (作為userID
)。 -
cn
和sn
是依據此測試中所使用之 LDAP 綱要的必要屬性,如果未明確指定,則會使用userID
來填入這些屬性
-
使用案例 #2
在此使用案例中,設定如下:
-
無使用者佈建模組組態
-
對應規則是透過 SAML 屬性郵件至 LDAP 郵件屬性來完成
同盟 SSO 之後,建立別名的使用者記錄:
dn: uid=alice,ou=users,dc=us,dc=oracle,dc=com
mail: alice@oracle.com
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: top
uid: alice
cn: alice
sn: alice
LDAP 使用者記錄具有下列特性:
-
UserID
:-
沒有「使用者啟動設定」模組組態
-
如果使用者識別存放區
UserID
(測試中的uid
) 是 IdP 所傳送的屬性,則檢查「使用者啟動設定」模組:不是此情況 -
「使用者啟動設定」模組使用 NameID 作為
userID
(儲存在 LDAPuid
屬性中):uid
設為 alice
-
-
額外屬性 :
-
「使用者啟動設定」模組會設定對應規則中使用的屬性:SAML 宣告中的電子郵件屬性已對應至郵件。郵件屬性設為
alice@oracle.com
-
cn
和sn
是此測試中所使用之 LDAP 綱要的必要屬性,如果未明確指定,則會使用userID
來植入這些屬性
-
使用案例 #3
在此使用案例中,設定如下:
-
對應規則是透過 NameID 完成至 LDAP
uid
屬性 -
設定為設定
givenname
、sn
和mail
屬性的使用者啟動設定模組。
若要這麼做,請執行下列步驟:
-
移至「OAM 管理主控台」:
http(s)://oam-admin-host:oam-adminport/oamconsole
-
瀏覽至 Access Manager 、 Plugin
-
選取 FedUserProvisioningPlugin
-
在 KEY_USER_RECORD_ATTRIBUTE_LIST 欄位中,以逗號區隔的清單輸入
givenname
、sn
和郵件 (不含空格):givenname
、sn
、mail
-
按一下儲存 (Save)
同盟 SSO 之後,便會建立 alice 的使用者記錄:
dn: uid=alice,ou=users,dc=us,dc=oracle,dc=com
mail: alice@oracle.com
givenName: Alice
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: top
uid: alice
cn: alice
sn: alice
sn: Appleton
LDAP 使用者記錄具有下列特性:
-
UserID
:-
userID
沒有「使用者啟動設定」模組組態 -
如果使用者識別存放區
UserID
(測試中的uid
) 是 IdP 所傳送的屬性,則檢查「使用者啟動設定」模組:不是此情況 -
「使用者啟動設定」模組使用 NameID 作為
userID
(儲存在 LDAPuid
屬性中):uid
設為 alice
-
-
額外屬性 :
-
「使用者啟動設定」模組設定對應規則中使用的屬性:NameID 已對應至
uid
。此屬性已設定 (作為userID
)。 -
「使用者啟動設定」模組會從已處理屬性清單中擷取
givenname
、sn
和郵件屬性,並在 LDAP 使用者記錄上設定這些屬性。 -
cn
是依據此測試中所使用之 LDAP 綱要的必要屬性,如果未明確指定,則會使用userID
來填入該屬性
-
使用案例 #4
在此使用案例中,設定如下:
-
對應規則是透過 SAML 屬性郵件至 LDAP 郵件屬性來完成
-
設定為使用
givenname
作為userID
的「使用者啟動設定」模組
若要這麼做,請執行下列步驟:
-
移至「OAM 管理主控台」:
http(s)://oam-admin-host:oam-adminport/oamconsole
-
瀏覽至 Access Manager 、 Plugin
-
選取 FedUserProvisioningPlugin
-
將
KEY_USER_RECORD_ATTRIBUTE_LIST
欄位設為空白值 -
將
KEY_USERID_ATTRIBUTE_NAME
欄位設為givenname
-
按一下儲存 (Save)
同盟 SSO 之後,便會建立 alice 的使用者記錄:
dn: uid=Alice,ou=users,dc=us,dc=oracle,dc=com
mail: alice@oracle.com
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: top
uid: Alice
cn: Alice
sn: Alice
LDAP 使用者記錄具有下列特性:
-
UserID
:- 「使用者啟動設定」模組設定為使用
givenname
作為userID
- 「使用者啟動設定」模組設定為使用
-
額外屬性 :
-
「使用者啟動設定」模組會設定對應規則中所使用的屬性:SAML 宣告中的電子郵件屬性已對應至郵件。郵件屬性設為
alice@oracle.com
。 -
cn
和sn
是此測試中所使用之 LDAP 綱要的必要屬性,如果未明確指定,則會使用userID
來植入這些屬性
-
使用案例 #5
在此使用案例中,設定如下:
-
對應規則是透過 SAML 屬性郵件至 LDAP 郵件屬性來完成
-
使用者啟動設定模組設定為
-
使用 NameID 作為
userID
-
設定
givenname
和sn
屬性
-
若要這麼做,請執行下列步驟:
-
移至「OAM 管理主控台」:
http(s)://oam-admin-host:oam-adminport/oamconsole
-
瀏覽至 Access Manager 、 Plugin
-
選取 FedUserProvisioningPlugin
-
將
KEY_USER_RECORD_ATTRIBUTE_LIST
欄位設為 (以逗號分隔的清單,不含空格):givenname
,sn
-
將
KEY_USERID_ATTRIBUTE_NAME
欄位設為fed.nameidvalue
,這是 NameID 值的屬性名稱 -
按一下儲存 (Save)
Access_mngt_nameID_Value.jpg 圖解說明
同盟 SSO 之後,便會建立 alice 的使用者記錄:
dn: uid=alice,ou=users,dc=us,dc=oracle,dc=com
mail: alice@oracle.com
givenName: Alice
objectClass: person
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: top
uid: alice
cn: alice
sn: alice
sn: Appleton
LDAP 使用者記錄具有下列特性:
-
UserID:
- 「使用者啟動設定」模組設定為使用 NameID 值 (
fed.nameidvalue
) 作為userID
- 「使用者啟動設定」模組設定為使用 NameID 值 (
-
額外屬性 :
-
「使用者啟動設定」模組會設定對應規則中所使用的屬性:SAML 宣告中的電子郵件屬性已對應至郵件。郵件屬性設為 alice@oracle.com。
-
「使用者啟動設定」模組會從已處理屬性清單中擷取
givenname
和sn
屬性,並在 LDAP 使用者記錄上設定這些屬性。 -
cn
是根據此測試中所使用之 LDAP 綱要的必要屬性,如果未明確指定,則會使用userID
來植入該屬性
-
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,瀏覽 education.oracle.com/learning-explorer 成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
JIT User Provisioning in OAM and SP
F61369-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.