Oracle Identity Cloud Service 中配置应用程序

要使验证正常工作,必须使用可保护 Oracle Fusion Applications Cloud Service 和 Oracle PaaS ( Oracle Visual Builder )或定制 HTML5 应用程序的同一 Oracle Identity Cloud Service 实例。在 Oracle Identity Cloud Service 中,您需要创建用于客户机验证的应用程序。

在此方案中,我们将 Oracle Functions 加 Oracle API Gateway 的互动方式与 Oracle Functions 与 Oracle Fusion Applications Cloud Service 实体之间的交互区分开,方法是使用 Oracle Identity Cloud Service 作为单独实体,而不是针对这两者使用相同的 Oracle Identity Cloud Service 应用程序。

通常,Oracle 客户编写的 Oracle SaaS 扩展应用程序执行一些复杂的逻辑。例如,公用方案是从 Oracle Fusion Applications Cloud Service 获取数据,以某种方式处理数据,然后将数据推送回 Oracle Fusion Applications Cloud Service 到数据库等其他目标。

因此,我们在此提供了包含两个 Oracle Identity Cloud Service 应用程序的体系结构:

  • 一个应用程序,用于保护您的 Oracle Functions 作为资源以及作为 Oracle Fusion Applications Cloud Service 的可信客户机。
  • 一个可保护您的 Oracle Fusion Applications Cloud Service 实例作为资源的应用程序。

本文中的说明将指导您逐步完成创建和配置其中第一个应用程序以保护 Oracle Functions 的过程。这两个应用程序中的第二个应用程序应该已存在:要启用 Oracle Fusion Applications Cloud Service 与 Oracle PaaS 之间的联盟,需要您创建和配置应用程序。

此设置允许您配置不同的规则或策略来访问与可信客户机访问 Oracle Fusion Applications Cloud Service 的规则或策略不同的功能。在此配置中,API 网关的传入访问标记只需授权访问 Oracle Functions 才能调用函数功能,但访问 Oracle Fusion Applications Cloud Service 实例并不一定需要具有相同的授权。Oracle Visual Builder 应用程序需要关联的 Oracle Identity Cloud Service 应用程序,它将生成访问标记以访问 API 网关。此 Oracle Identity Cloud Service 应用程序将成为函数/API 网关资源的客户端。

体系结构图中显示的标记交换提供了一个额外的保护层来传播标识,该标识用于将函数作为Oracle Fusion Applications Cloud Service 资源的客户机,后者类似于在早期支持的SaaS扩展中使用的Oracle WebLogic OAuth断言过程,例如使用Oracle Java Cloud Service的客户机。

这可能意味着在某些用例中,用于为 Oracle Functions 生成标记的 Oracle Identity Cloud Service 应用程序只能具有函数的资源范围,而不能具有 Oracle Fusion Applications Cloud Service 的资源范围。在这种情况下,Oracle Functions 将无法重用该标记来调用 Oracle Fusion Applications Cloud Service,但是对于访问 Oracle Functions 是有效的。因此,您可以实施其中某些用户或函数 evocations 没有访问权限的逻辑流,而其他用户则基于业务逻辑、用户角色和权限或其他标准执行此操作。

在其他用例中,Oracle Functions 可以包含代码,以使用在来自网关 API 的请求中传递的证书和用户为 Oracle Fusion Applications Cloud Service 请求访问标记。

Oracle Identity Cloud Service 中为 Oracle Functions 创建应用程序

Oracle Identity Cloud Service 中,您需要创建一个用于 Oracle Functions 客户机验证的机密应用程序。

在您与 Oracle Fusion Applications Cloud Service 实例联合的同一 Oracle Identity Cloud Service 实例中,创建机密应用程序并确保设置客户机配置,以便启用客户机身份证明、JWT 断言和资源所有者授予。

  1. 登录到 Oracle Cloud My Services,单击用户,然后单击身份控制台
  2. 选择应用程序选项卡,然后单击添加。然后单击机密应用程序
  3. 在“添加机密应用程序”向导的“详细信息”页上,为新应用程序提供一个名称。如果需要,可以设置其他值,例如说明、图标、显示设置和标记。单击下一步
  4. 在“客户机”页上,选择现在将此应用程序配置为客户机
    此时将在页上显示附加选项。通过以下方式设置:
    • 允许的授权类型:选择资源所有者客户机身份证明JWT 断言
    • 启用允许非 HTTPS url
    • 您不需要此用例的重定向 URL。
    • 客户机类型:保留“机密”选项处于选中状态。
  5. 在“资源”部分中,选择注册资源。创建 API Gatway 实例时,将主受众值设置为在 Oracle Cloud Infrastructure 控制台中生成的 API 网关实例主机名。
    Oracle Cloud Infrastructure 中,您可以选择网关,选择“网关信息”选项卡,实例“主机名”将显示在选项卡上。
  6. 范围下,单击以添加范围,然后为使用 API 网关 JWT 授权策略的部署添加基础 url 值。例如,/saasextension
    您将使用此范围允许应用程序访问 Oracle Functions 资源。可以根据需要为其他资源添加其他范围。
  7. 您无需授予对管理 Api 的访问权限。
  8. 单击下一步转到“资源”页,然后再次单击下一步转到“授权”页。
  9. 在“授权”页上,单击完成
    此时将显示已添加应用程序通知,并带有您的客户端 ID 和客户端密钥。请注意,这些信息可在以后使用。关闭通知时,将显示应用程序。
  10. 单击应用程序名称右侧的激活按钮。

准备和测试 Oracle Identity Cloud Service 应用程序

Oracle Identity Cloud Service 机密应用程序配置为连接到与 Oracle Fusion Applications Cloud Service 实例相对应的应用程序,然后测试应用程序。

在此过程中,您将配置新创建的 Oracle Identity Cloud Service 应用程序的资源以为 Oracle Fusion Applications Cloud Service 应用程序添加范围,然后验证您的 Oracle PaaS 系统中的授权用户帐户是否可以获得 Oracle Fusion Applications Cloud Service 实例的令牌。
  1. 登录到 Oracle Cloud My Services,单击用户,然后单击身份控制台
  2. 选择应程序选项卡,然后找到并选择刚为 Oracle Functions 创建的应用程序。
  3. 编辑标记发布策略。将授权的资源设置为全部。
  4. 为 Oracle Applications Cloud (Fusion)添加资源,使用 Fusion 应用程序的范围(不需要保护)。
  5. 请确保您具有 Oracle PaaS 和 Oracle Fusion Applications Cloud Service 中同时存在的用户帐户,并且具有足够的权限,可以访问您将使用 REST API 调用查询的数据。例如,“销售管理员”角色可能足够。
  6. 使用这些用户身份证明生成访问标记来测试应用程序。通过以下方式使用 Postman 请求标记功能生成访问标记:指定为范围,即 Oracle Identity Cloud Service Oracle Fusion Applications Cloud Service Application OAuth -proprotected resource Primary Audience 值。对于此简单测试,请使用口令身份证明作为授权类型,以便将用户名用作生成的标记中的主题。(在生产环境中,您将在客户机将提供用户信息的位置使用客户机身份证明。)访问标记 URL 是通过获取 Oracle Identity Cloud Service 主机 URL 并附加 /oauth2/v1/token 来构成的。例如,https://<您的身份云hostname.identity.oraclecloud.com > /oauth2/v1/token
如果所有内容都正常工作,则应接收 JWT 标记作为响应,以后您可以在对 Oracle Fusion Applications Cloud Service REST API 端点的调用中使用并接收相同的输出。例如:
curl --location --request GET 'https://<your fusion instance>.<domain>.com/fscmRestApi/resources/11.13.18.05/expenses' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <JWT_TOKEN>'
此当前查询应返回费用数据。

将 Oracle Functions Oracle Identity Cloud Service 应用程序配置为可信客户机

您需要将 Oracle Identity Cloud Service 应用程序用作可信客户机的证书,才能向您的 Oracle Functions 发出 OAuth 请求。如果尚未提供证书,可以生成自签名证书以供开发期间使用。

如果您尚未具有密钥,则可以使用提供的脚本 genSelfSignedKeypair.sh 生成密钥。通过指定租户和密钥别名值执行脚本。在此示例中,我们提供 mytenant 作为租户名称,fnassertionkey 作为密钥别名。

  1. 如果需要,请使用随此解决方案播放书的代码示例提供的脚本来生成证书:
    $ ./genSelfSignedKeypair.sh --tenant mytenant  --keyalias fnassertionkey
    ==============================================
    Generating Self Signed Certificates in Kesytore
     
     
    General Properties:
    -------------------------------
    ==> Workdir: ./genCertsDir
    ==> Tenant Name: mytenant
    ==> Key Alias: fnassertionkey
     
    Keystore Properties:
    -------------------------------
    ==> Store Type: PKCS12
    ==> Key Algorithm: RSA
    ==> Key Size: 2048
    ==> Validity time(days): 1825
    ==> Sign Algorithm: SHA256withRSA
    ==> dname: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
     
    Passwords:
    [*] Keystore Password:
    [*] PrivateKey Password:
     
    Generate keypair in keystore ./genCertsDir/mytenant-keystore.p12 ...
    Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 1,825 days
        for: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
    [Storing ./genCertsDir/mytenant-keystore.p12]
    Export public certificate with alias fnassertionkey from generated keystore (openssl) ...
    Certificate stored in file <./genCertsDir/mytenant-fnassertionkey-cert.pem>
    Extract Private Key in PKCS8 format from generated keystore (openssl) ...
    Self Signed certificate generated successfully
    ==============================================
    Files generated:
    ==> ./genCertsDir/mytenant-keystore.p12
    ==> ./genCertsDir/mytenant-fnassertionkey-cert.pem [Stored in Keystore]
    ==> ./genCertsDir/mytenant-fnassertionkey-pkcs8-key.pem [Stored in Keystore]
    ==============================================

    生成的文件将用在函数代码和 Oracle Identity Cloud Service 应用程序配置中:

    • mytenant-keystore.p12:已生成密钥库以在代码中使用,从而提取用于断言流程的认证。
    • mytenant-fnassertionkey-cert.pem:用于 Oracle Identity Cloud Service 应用程序配置的公共证书。

    第三个 pem 文件无需立即使用,但是将从代码中的 mytenant-keystore.p12 密钥库提取类似版本,并将其导出以供参考:

    • mytenant-fnassertionkey-pkcs8-key .pem:PKCS8 格式的私有密钥
  2. 使用可信客户端类型配置 Oracle Functions Oracle Identity Cloud Service 应用程序,并使用证书的密钥别名添加证书。登录到 Oracle Cloud My Services,单击用户,然后单击身份控制台
  3. 选择应程序选项卡,然后选择 之前为 Oracle Functions 访问创建的 Oracle Identity Cloud Service 应用程序。
  4. 在“客户机配置”部分中,找到“证书”字段,输入您的证书使用的别名(在上面的示例中为 fnassertionkey),然后单击导入按钮导入 mytenant-fnassertionkey-cert.pem 文件。

将密钥库信息导入到 Oracle Cloud Infrastructure Vault

Oracle Functions 断言流程将需要使用导入的密钥库和口令。为了获得最佳安全性并避免使用硬编码的口令和密钥,您可以利用 Oracle Cloud Infrastructure Vault

使用 Oracle Cloud Infrastructure Vault 服务可以安全地加密和存储敏感数据。可以将密钥库和公共密钥口令存储在 Vault 中,然后使用 Oracle Functions 后端中的 Oracle Cloud Infrastructure SDK 引用它来执行分离。还可以安全地加密并存储 JKS 文件。

在此解决方案播放书的开始之前部分中,需要您设置 Oracle Functions 环境,例如通过使用快速入门指南。快速入门指南设置会要求您在根区间级别为函数创建策略。在以下示例中,该策略名为 FnTenancyPolicy。您需要向策略添加其他语句,以允许 Oracle Functions 访问与该策略关联的 Vault。Oracle Functions 的组名称应该是您在 Quick Start Guide 中配置租户时创建的组名称。在此示例中,fnGroup1 是可以使用 Oracle Functions 的用户组。

  1. Oracle Cloud Infrastructure 控制台的监管和管理下,转到身份并单击策略
    此时将显示您正在查看的区间中的策略列表。
  2. 从左侧的列表中选择根划分。
  3. 选择 Oracle Functions 策略的名称,例如 FnTenancyPolicy 并单击编辑策略语句。添加以下语句:
    allow group fnGroup1 to manage secret-family in tenancy
    allow group fnGroup1 to manage vaults in tenancy
    allow group fnGroup1 to manage keys in tenancy
  4. 选择保存更改
  5. 在区间中创建 Vault 实例。
    1. 在监管和管理组下,转至安全性并选择保管库
    2. 在“列表范围”下的“区间”列表中,选择要创建 Vault 的区间的名称,然后单击创建 Vault
    3. 在创建保管库对话框中,单击名称,然后输入保管库的显示名称。请避免在此字段中输入任何机密信息。
    4. (可选)通过选中使虚拟专用保管库复选框,使保管库成为虚拟专用保管库
    5. 选择创建
  6. 创建与密钥关联的密钥实例。
    1. 在“列表范围”下的“区间”列表中,选择要在其中创建密钥的区间的名称,然后单击刚创建的 Vault 的名称。
    2. 选择,然后选择创建密钥
    3. 在“创建密钥”对话框的“在区间中创建”列表中选择一个区间。(密钥可存在于保管库所在的区间之外。)
    4. 选择名称,然后输入用于标识密钥的名称。请避免在此字段中输入任何机密信息。
    5. 从关键形状:长度列表中选择长度,以位为单位指定密钥长度
    6. 完成后,单击创建密钥
  7. 创建断言案例所需的密钥:
    1. 密钥库口令
    2. PK 口令
    3. 密钥库文件
    需要添加密钥库文件内容的 Base64-encoded 表示形式。可以使用 openssl 命令生成此命令:
    openssl base64 -in <YourKeystoreName>.p12 -out ksBase64Encoded.txt | cat ksBase64Encoded.txt

    将内容复制到密钥中的密钥值。要创建新密钥,请执行以下操作:

    1. 列表范围下的“区间”列表中,选择要在其中创建密钥的区间的名称。
    2. 从区间中的保管库列表中,选择刚创建的保管库的名称。
    3. 选择封,然后选择创建密钥
    4. 在“创建密钥”对话框中,从“在区间中创建”列表中选择一个区间。(Secrets 可存在于 Vault 所在的区间外部。)
    5. 选择名称,然后输入用于标识密钥的名称。请避免在此字段中输入任何机密信息。
    6. 选择说明,然后输入密钥的简要说明以帮助标识密钥。请避免在此字段中输入任何机密信息。
    7. 选择要在密钥导入到保管库时用于对密钥内容进行加密的主体加密密钥。(密钥必须属于同一保管库。)
    8. 通过从密钥类型模板列表中选择模板类型,指定所提供密钥内容的格式。(当您使用控制台创建密钥或密钥版本时,可以提供纯文本的密钥内容,但密钥内容在发送到服务之前需要是 base64-encoded。如果选择此格式,控制台会自动为您编码纯文本密钥内容。)
    9. 选择密钥内容,然后输入密钥内容。(密钥绑定所允许的最大大小为 25 KB。)
    10. (可选)可以应用规则来管理密钥的使用方式。您可以创建一个关于在密钥版本中重用密钥内容的规则,也可以创建一个规则来指定密钥内容何时到期。
    11. 完成后,选择创建密钥
    12. 对创建所需的每个密钥重复这些步骤。
  8. 创建动态组:
    1. 在控制台中,选择身份,然后选择动态组
      此时将显示租户中动态组的列表。
    2. 选择创建动态组
    3. 输入动态组的名称。记录名称以供将来使用。该名称在租户的所有组中必须唯一。以后不能更改此名称。
    4. 输入说明。以后无法使用控制台更改说明,但可以使用 API 进行更改。
    5. 匹配规则部分中,输入以下规则(使用区间的 OCID):
      ALL { resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    6. 选择创建动态组
      验证匹配规则语法,但是不验证 Ocid。确保您输入的 Ocid 正确。
  9. 将语句添加到在根区间级别为 Oracle Functions 创建的策略,作为 Oracle Functions Quick Start Guide 的一部分,以允许刚创建的动态组访问您的 Secrets。
    1. 监管和管理下,转到身份并单击策略
      此时将显示您正在查看的区间中的策略列表。
    2. 从列表中选择根划分。
    3. 选择 Oracle Functions 策略的名称,例如 FnTenancyPolicy 并单击编辑策略语句。添加以下语句:
      allow dynamic-group your_fn_group to read secret-family in tenancy
配置了 Vault Secrets 时,可以使用每个密钥的 OCID 通过 Oracle Cloud Infrastructure SDK 访问它们。以后在本解决方案中介绍的示例函数中将使用 V_KEYSTORE、V_KS_PASS 和 V_PK_PASS 属性。

Oracle Identity Cloud Service 中配置 Oracle Visual Builder 应用程序

Oracle Visual Builder 应用程序具有相关联的 Oracle Identity Cloud Service 应用程序,它自动配置为可信客户机。您需要配置该应用程序以便将其用作 Oracle Functions 资源的客户端。

作为建议体系结构中显示的交互的一部分,与 Oracle Identity Cloud Service 实例关联、与 Oracle Fusion Applications Cloud Service 联合并连接到 Oracle Functions 的 Oracle Visual Builder 应用程序需要能够生成可访问 API 网关和 Oracle Functions 资源的访问标记(如范围所设置)。必须在 Oracle Identity Cloud Service 中配置 Oracle Visual Builder 应用程序,以将其设置为资源的客户端,该资源通过添加您创建的新 Oracle Functions 应用程序的范围来扩展 SaaS 功能。

Oracle Visual Builder 中创建新应用程序时,将自动创建 Oracle Identity Cloud Service 应用程序。例如,如果您创建一个名为 TestSaaSExtensionFN 的应用程序,则可以导航到 Oracle Identity Cloud Service 控制台并列出应用程序,而您应该查找名为 TestSaaSExtensionFN 的应用程序。

  1. 创建 Oracle Visual Builder 应用程序。
  2. Oracle Identity Cloud Service 中,导航到与您的新 Oracle Visual Builder 应用程序对应的应用程序。
  3. 在“标记发布策略”部分中,将授权资源设置为特定,并使用添加范围按钮添加具有 Oracle Functions API 网关实例范围的资源。
    如果在 VBCS IDCS 应用程序中将重定向 URL 标记为必需,这是因为在客户机配置中,将选中“允许的授权类型”中的“隐式”复选框。在这种情况下,您需要在此输入中提供 Oracle Visual Builder Web 应用程序的 URL。稍后可根据需要更新这些值。
重复此过程,以便在 Oracle Identity Cloud Service 中为每个其他 Oracle Visual Builder 应用程序添加可访问 API 网关 Oracle Functions 应用程序的范围。