远程组件的安全性

Oracle Content Management 允许第三方开发人员将他们的定制组件集成到 Oracle Content Management 平台中,但是将这些组件存储在远程服务器上。

每个远程组件都必须具有在 Oracle Content Management 中注册的设置和呈现端点。除了端点,开发人员还需要提供对注册组件唯一的密钥。

Oracle Content Management 调用注册组件的端点以在站点页中实现内容。因为这些端点是对公共 Internet 公开的,所以开发人员应验证注册远程组件的端点是否是从 Oracle Content Management 调用的。为了验证调用方的真实性,将为 URL 的注册端点提供签名的令牌。通过使用注册过程中提供的远程组件的密钥来验证签名令牌中嵌入的数字签名,从而对调用方进行验证。

令牌的格式为:

{base64 encoded serialized JSON data}.{base64 encoded signature}

传递到注册的应用程序端点的令牌示例如下所示:

eyJpbnN0YW5jZWlkIjoiQTRGOTE3REY5OTZEN0Q3ODBCMjUzODZFOTFEMDA3ODJGMjVBRjY2Rjc3OTIiLCJzaWduZGF0ZSI6IjE0NDU2MzcwNTk5MTciLCJzaXRlZG9tYWluIjoic2VydmljZTEtdGVuYW50MS51cy5vcmFjbGUuY29tIiwicGVybWlzc2lvbnMiOiJTSVRFX09XTkVSIiwiZW50aXRsZW1lbnRzIjoiIn0=.5p3of7t11OwuysF3zpm+YgICSHH8C/BHczdbVZx2VH8=

令牌包含两个不同部分:数据和签名,由 '.' 分隔符分隔。

一般来说,在对组件的注册端点授予访问权限之前,开发人员应始终在编辑或预览模式下验证令牌。此外,在设置端点中验证调用方时,开发人员应始终注意查找令牌的 permissions 字段中的 SITE_OWNER 值。令牌的 permissions 字段仅在编辑模式下显示 SITE_OWNER 值。编辑会话过程中生成的令牌不会持久保留回页模型,将与运行时令牌切换,该运行时令牌在 permissions 字段中具有 NULL 值。

数据

实例的数据部分是 Base64 JSON 编码的字符串。下面是 JSON 字符串结构:

{
  "instanceid": "BBDC7614F693B75110D811E6C0B77C935FAEC5112E5E",
  "permissions": "",
  "entitlements": "",
  "signdate": "1435426735293",
  "sitedomain": "service1-tenant4.localhost"
}
字段名称 说明

instanceid

Oracle Content Management 租户的组件的唯一标识符。

signdate

签名生成日期。

sitedomain

Oracle Content Management 实例的域名。

permissions

站点成员的权限集。在编辑模式下,其值为 "SITE_OWNER";在其他情况下,它没有值。

entitlements

站点所有者购买的高级功能列表。

签名

远程组件实例的数据部分先进行串行化,然后再由 APP_SECRET_KEY 签名。在注册组件时,必须生成此密钥并向开发人员显示。签名是通过使用密钥生成组件实例数据部分的散列(串行化 JSON 结构)计算得出的,如下所示:

$signature = HMAC (serialized JSON structure, APP_SECRET_KEY)

生成签名时使用的散列算法为 SHA256。令牌则是将串行化 JSON 结构和生成的签名组件连接的结果,如下所示:

$instance = {base64encoded serialized JSON structure}.{base64encoded $signature}