角色型授權

請利用授權資訊來判斷呼叫端有沒有要求服務的必要專用權。

下圖說明授權期間所用的程序。

從 Web 用戶端存取的 Web 資源是由 Web 合作程式來處理的。 來自 Java 用戶端的 Enterprise JavaBeans (EJB) 資源存取,不論是 Enterprise Bean 或 aservlet ,都由 EJB 合作程式處理。 EJB 合作程式和 Web 合作程式會從 Object Request Broker (ORB) 現行物件中擷取用戶端憑證。 用戶端憑證是在接收 ORB Current 物件中的憑證時,在鑑別程序期間設定。 資源和收到的憑證都會呈現給 WEAccessManager,讓其用來檢查用戶端是否有權存取要求的資源。

從 Web 用戶端存取的 Web 資源是由 Web 合作程式來處理的。 來自 Java™ 用戶端的 Enterprise JavaBeans (EJB) 資源存取,不論是 Enterprise Bean 或 Servlet ,都由 EJB 合作程式處理。 EJB 合作程式和 Web 合作程式會從 Object Request Broker (ORB) 現行物件中擷取用戶端憑證。 用戶端憑證是在接收 ORB Current 物件中的憑證時,在鑑別程序期間設定。 資源和收到的憑證都會呈現給 WEAccessManager,讓其用來檢查用戶端是否有權存取要求的資源。

存取管理程式模組含有兩個主要模組:
  • 資源許可權模組有助於判斷給定資源的必要角色。 這個模組會使用在應用程式啟動期間,安全執行時期所建置的「資源至角色」對照表。 如果要建置「資源至角色」對照表時,安全執行時期會讀取 Enterprise Bean 或 Web 模組(ejb-jar.xml 檔或 web.xml 檔)的部署描述子。
  • 權限表模組會參照「角色至使用者或群組」表格,來判斷用戶端有沒有被授與其中一個必要的角色。 「角色至使用者或群組」對照表也稱為授權表,這是安全執行時期在應用程式啟動時所建立的。

    如果要建置權限表,安全執行時期會適當讀取應用程式連結檔 ibm-application-bnd.xmiibm-application-bnd.xml

    支援的配置: 對於 IBM® 延伸和連結檔, .xmi.xml 副檔名會有所不同,視您是使用Java EE 5 之前的應用程式或模組,還是使用 Java EE 5 或更新版本的應用程式或模組而定。 IBM 延伸或連結檔命名為 ibm-*-ext.xmiibm-*-bnd.xmi ,其中 * 是延伸或連結檔的類型,例如 appapplicationejb-jarweb。 適用的條件如下:
    • 如果應用程式或模組使用第 5 版之前的 Java EE 版本,副檔名必須是 .xmi
    • 對於使用 Java EE 5 或更新版本的應用程式或模組,副檔名必須是 .xml。 如果 .xmi 檔隨附於應用程式或模組,產品會忽略 .xmi 檔。

    不過, Java EE 5 或更新版本模組可以存在於包含Java EE 5 之前版本檔案且使用 .xmi 副檔名的應用程式內。

    ibm-webservices-ext.xmiibm-webservices-bnd.xmiibm-webservicesclient-bnd.xmiibm-webservicesclient-ext.xmiibm-portlet-ext.xmi 檔案會繼續使用 .xmi 副檔名。

請利用授權資訊來判斷呼叫端有沒有要求服務的必要專用權。 您可以使用多種方式來儲存授權資訊。 比方說,您可以針對每項資源,各儲存一份含有使用者和使用者專用權清單的存取控制清單。 另一個儲存資訊的方式是建立每位使用者與一份資源清單和對應專用權的關聯性。 這份清單稱為功能清單。

WebSphere® Application Server 使用 Java 2 Platform Enterprise Edition (J2EE) 授權模型。 這個模型會依照下列方式來組織授權資訊:

在組合應用程式期間,會將呼叫方法的許可權授與一或多個角色。 角色是一組許可權;例如,在銀行業應用系統中,角色便可以包括出納員、監督者、辦事員及其他行業相關的職位。 出納員角色會和管理某帳戶金額的執行方法許可權連結,例如提款和存款方法。 但並未授與出納員角色關閉帳戶的許可權;這項許可權是給予監督者角色。 應用程式組合人員會針對每一種角色定義一份方法許可權清單。 這份清單會儲存在應用程式的部署描述子中。 使用 Java EE7 以及更新版本,會引進特殊角色名稱 "**" 。 此角色指出在鑑別使用者時授與存取權。

J2EE 模型未定義三個特殊主體:AllAuthenticatedUsers、AllAuthenticatedInTrustedRealms 和 Everyone。 特殊主體是在使用者登錄之外定義的產品定義實體。 這個實體一般用來代表登錄中的使用者或群組類別。

  • 「所有已鑑別的使用者」主題容許所有已鑑別的使用者存取受保護的方法。 只要使用者可以順利鑑別,使用者就可以存取受保護的資源。
  • AllAuthenticatedInTrustedRealms 主體允許所有已鑑別的外部使用者(連結其他網域範圍的使用者)存取受保護的方法。 只要使用者可以順利鑑別,使用者就可以存取受保護的資源。
  • Everyone 主體允許受保護資源的存取不受限制。 使用者不需要鑑別便可取得存取權;這項特殊主題可提供對保護方法的存取權,就好像這些資源不受保護。

在部署應用程式期間,會將真正的使用者或使用者群組指派給各個角色。 當使用者指派給某角色時,這個使用者會得到授與這個角色的所有方法許可權。

[AIX Solaris HP-UX Linux Windows][IBM i]應用程式部署人員不需要瞭解個別方法。 藉著將角色指派給方法,應用程式組合人員簡化了應用程式部署人員的工作。 部署人員並非使用一組方法,而是使用一些角色,角色代表的是方法的語意分組。

指派給使用者的角色可以不只一個;授與使用者的許可權,就是授與每個角色的許可權之聯集。 另外,如果鑑別機制支援分組使用者,則可以將這些群組指派給角色。 將群組指派給角色的作用,如同將個別使用者指派給角色。

[AIX Solaris HP-UX Linux Windows][IBM i]部署期間的最佳作法是將群組而非個別使用者指派給角色,原因如下:
  • 在授權檢查期間增進效能。 群組數目通常會比使用者少很多。
  • 利用群組成員資格控制資源存取,以提供更大的彈性。
  • 支援從產品環境之外的群組中新增和刪除使用者。 這個動作最好是在 WebSphere Application Server 角色中新增及移除它們。 請停止然後再重新啟動企業應用程式,使這些變更生效。 在正式作業環境中,這個動作可能非常具有破壞性。

在執行時期, WebSphere Application Server 會根據使用者的識別資訊,以及使用者至角色的對映,來授權送入的要求。 如果使用者隸屬的任意角色具有許可權可執行某個方法,該使用者的要求就會獲得授權。 如果使用者不屬於擁有許可權的任何角色,要求就會被拒絕。

J2EE 方式代表一種宣告式的授權方式,不過,它也認定您無法以宣告方式來處理所有情況。 在這些情況下,要以程式化方式來提供判斷使用者和角色資訊的方法。 對於 Enterprise Bean , WebSphere Application Server支援下列兩種方法:
  • getCallerPrincipal:這個方法會擷取使用者識別資訊。
  • isCallerInRole:這個方法會就特定角色來檢查使用者識別資訊。
對於 Servlet , WebSphere Application Server支援下列方法:
  • getRemoteUser
  • isUserInRole
  • getUserPrincipal

這些方法對應於 Enterprise Bean 方法。