注意:

在 OCI API 网关中启用 OAuth2 验证,以使用 OCI Functions 和 OCI SDK 调用 OCI 服务

简介

我们通常需要应用来使用 Oracle Cloud Infrastructure (OCI) REST 服务。可以通过多种方式来确保组件之间的安全性,从而确保应用可以安全地向后端服务进行身份验证。

此任务是 Oracle Cloud 中的原生任务,因为有多种方法可以保护网络和访问现有服务。只有几个设置,你完成了。但是,在某些情况下,应用程序可能会提供额外的安全和连接要求。此材料的用例满足了混合或多云方案(连接到 Oracle Cloud 的内部部署或连接到其他云的 Oracle Cloud)中非常常见的需求。

我们来演示以下方案:

因此,本教程提供了以下解决方案:

目标

先决条件

任务 1:使用 Oracle Identity Cloud Service 配置 OAuth2

  1. 获取 OCI API Gateway 参数:开始配置 OAuth2 机制。我们需要通过将 Oracle Cloud 中的 Oracle Identity Cloud Service 配置为身份提供者,将您的 OCI API 网关实例集成到身份提供者。

    转到 OCI API Gateway 实例并复制主机名。此信息将在下一步的 Oracle Identity Cloud Service 资源服务器配置中使用。

    img.png

  2. 创建资源应用程序:我们需要为您的应用程序创建 OAuth2 授权程序。我们可以利用 Oracle Cloud 中的 Oracle Identity Cloud Service 来做到这一点。

    1. 在 OCI 控制台中,转至身份和安全,然后选择联盟

      img.png

    2. 单击 OracleIdentityCloudSevice

      img.png

    3. 单击 Oracle Identity Cloud Service 实例的链接。

      img.png

    4. 我们将创建两个应用程序。单击应用程序和服务

      img.png

    5. 在“应用程序”中,单击添加

      img.png

    6. 选择 Confidential Application(机密应用程序)以开始配置资源服务器。

      img.png

    7. 我们将配置第一个应用程序。在资源服务器应用程序中输入名称,然后单击下一步

      img.png

    8. 单击 Skip for later(跳过)。我们只需要配置资源。

      img.png

    9. 输入在步骤 1 中获取的 OCI API 网关主机名。

      img.png

    10. 单击添加范围并输入范围信息。

      img.png

    11. 查看范围信息,两次单击下一步,然后单击完成

      img.png

    12. 单击激活以激活您的应用程序。

      img.png

  3. 创建客户机应用程序

    1. 在“应用程序”中,单击添加

      img.png

    2. 选择 Confidential Application(机密应用程序)以开始配置资源服务器。

      img.png

    3. 为应用程序输入名称,然后单击下一步

      img_1.png

    4. 选择 Configure the application as a client now(立即将应用程序配置为客户端)以启用客户端应用程序的配置。选择客户端身份证明JWT 断言代表

      img.png

    5. 向下滚动屏幕并单击添加范围

      img.png

    6. 查找之前创建的资源应用程序(在此任务中为 oauth_resource_server),然后单击添加

      img.png

    7. 您可以看到您的范围已添加到应用程序中。单击下一步

      img.png

      :保留范围值,您需要使用它来请求令牌。

    8. 跳过资源 Web 层策略窗口。在授权中,选择强制授权为授权,然后单击完成

      img.png

    9. 保留客户端 ID客户端密钥信息。您需要这样做才能获取令牌。

      img.png

    10. 单击激活可激活应用程序,并且 OAuth2 授权者已准备好进行测试。

      img_1.png

  4. 获取令牌:现在我们可以测试 OAuth2 授权程序以获取令牌。

    1. 编写授权者的 URL。您可以通过在浏览器中获取 Oracle Identity Cloud Service URL 来获取此 URL。在 Oracle Identity Cloud Service URL 中,您可以看到如下内容:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole

    2. oraclecloud.com(根端点)之前,您将需要 URL 链接。例如,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com

    3. 我们需要添加 oAuth 验证路径。此 URL 将作为 POST REST 请求执行。例如,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token。您需要输入一些参数来请求令牌。

    4. 基本验证客户端 ID 以及客户端密钥的形式输入身份证明。

      img.png

    5. Body(正文)内容中,输入 grant_typescope(范围)值。请记住,范围是在 Oracle Identity Cloud Service 配置中捕获的。

      img.png

    6. 单击发送并执行 POST 请求并查看标记。

      img_2.png

  5. 创建 JSON Web 密钥 (JWK) :在浏览器中,输入根 Oracle Identity Cloud Service 端点,添加 /admin/v1/SigningCert/jwk 以获取 JWK:https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/admin/v1/SigningCert/jwk

    您将收到如下所示的 JWK 字符串。

    img_2.png

    我们需要处理此 JWK 字符串。

    {"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"key_ops":["sig","encrypt"],"alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
    

    • 此 JWK 已编辑。

    • 如果收到错误消息,则需要在 Oracle Identity Cloud Service 中提供访问权限。

    img.png

    JWK 字符串的重要更改:在进行某些更改之前,JWK 字符串在 OCI API Gateway 中将不可用。

    1. 找到带有 "key_ops":["x","y","z"] 的段,然后替换为 "use" :"sig" 。如下所示(比较两个字符串)。

      {"keys":[{"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}]}
      
    2. 从开头删除字符串 {"keys":[,从结尾删除字符串 ]}。最终字符串将如下所示。现在你可以用了。

      {"kty":"RSA","x5t#S256":"gHdIaH54tZt-b09W7_bTALX0DSj5t_Tsy6Wy2P1M_3E","e":"AQAB","x5t":"L_vneVBMiKA-ObXpNt8FZC4sRSY","kid":"SIGNING_KEY","x5c":["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"],"use" : "sig","alg":"RS256","n":"khfJqiO57xMlci4mtvirEGoDfPflsLWQd3G0ZkQQlQK2QcraQRQPkaoP8Lo6KMKA-1mV1TxGfd9QMx9ONmtRL8RIWvt0543Fae6wPfRpaeIcDpknsHAovsTdQ9SwfqwhF7slDg4ciEJ7-gdpCJKMVQcnsiWBDPCoIC1xzB7KbGKrWvaPAmxx1hoM4etjPwBy8h_JvHMfDEF1GkrUtCDiLFPyGBLPv50hmyN6mnTu47lBhzIwzeZ4HqZLgrOdqdA6iSZrBxRzHDi1IWqoj87FYpztkWXnV7VkIN37RwrG6bFKOHGaYEydoF0LmI4pltssTxsdtLyN-Hr8fM402cs7Iw"}
      

任务 2:配置 OCI 函数以调用 OCI SDK API

  1. 了解 OCI 函数和 API 网关:通过 API 网关公开服务是最佳做法。许多验证可以绕过从 API 网关到后端服务的身份证明,但如果后端验证不是客户端应用程序的合适方法,我们可以在 API 网关级别执行一些配置。

    在此步骤中,让我们了解 OCI API Gateway 如何帮助我们集成 OAuth2 验证和任何 OCI 服务的请求,例如通过 OCI Functions 预测数据科学模型部署。

    OCI Functions 可以执行任务来接收正文请求并传递到 OCI 服务。OCI 服务中的某些服务无法通过 OAuth2 方法进行验证,因此我们可以使用 OCI Functions 进行验证。

    在此示例中,模型部署预测服务可以通过 OCI IAM 中的 OCI 私有密钥进行验证。这可以通过资源主体来完成。

    如果您不知道如何创建和部署 OCI 函数,请参阅 OCI 函数快速入门

  2. 了解代码:此代码将准备用于 OCI API Gateway 。在您的 API 部署中,我们将在 API 网关中配置模型部署端点,并将其作为 HEADER 参数传递。因此,您可以将此功能用于所需的每个 API 网关部署中的许多模型部署。

    img_3.png

    • 我们将使用 Python 中的 oracle.ads 库授权资源主用户访问模型部署实例(请参见任务 4)。

      ads.set_auth('resource_principal')
      
    • 正文内容可由此行捕获。

      body = json.loads(data.getvalue())
      
    • 我们将在 OCI API Gateway 中配置名为 model_deployment 的 HEADER。此 HEADER 包含在 API 网关请求中传递的模型部署预测的 URL。

      endpoint = ctx.Headers()["model_deployment"]
      
    • 这将执行 REST API POST 请求,并从数据科学端点中的模型部署返回结果。

      return requests.post(endpoint, json=body, auth=ads.common.auth.default_signer()['signer']).json()
      
    • 这是需要在此函数中装入的 requirements.txt 库。

      requirements.txt
      ---------------------
      fdk>=0.1.54
      requests
      oracle-ads
      

    部署 OCI Functions,然后在 OCI API Gateway 中进行配置。

任务 3:配置 API 网关部署验证

:有关如何开发 OCI 函数并在 OCI API 网关中调用它的更多信息,请参阅使用 API 网关调用 OCI 函数

  1. 选择 OAuth 2.0 / OpenID Connect 并输入以下配置。这是通过 HEADER 进行验证的默认方式。

    Token Location: Header
    JWT token header name: Authorization
    Authentication scheme: Bearer
    
  2. 输入以前创建的 JSON Web 密钥字符串,选择静态密钥,然后输入以下信息。

    Key ID: SIGNING_KEY
    Key format: JSON web key
    JSON web key: <Your JWK string created previously>
    
  3. 使用先前获取的 OCI API Gateway hostnamehttps://identity.oraclecloud.com/ 身份输入发布者和受众。

    img.png

    配置在上一个任务中创建的 OCI 函数。

    img_1.png

  4. 配置 HEADER model_deployment 参数,单击显示路由请求策略

    img_5.png

  5. HEADER 转换中,单击添加

    img_2.png

  6. 您必须具有数据科学模型部署预测 URL,您可以在此处获取此 URL:转至数据科学菜单,选择数据科学实例和模型部署,然后单击调用您的模型

    注:在此处保存模型部署 OCID。稍后需要配置策略。

    img_3.png

    您的数据科学模型部署预测 URL。

    img_4.png

  7. 输入标头名称作为 model_deployment ,输入值作为数据科学模型部署预测 URL。

    img_3.png

    img_4.png

    注:保存 API 网关部署后,请记住 API 部署端点。

    img_2.png

任务 4:配置 OCI 组和策略

创建动态组以将 OCI 函数的访问权限授予您的 OCI 资源。在本教程中,我们将使用数据科学模型部署。有关如何使用资源主体的更多信息,请参见资源主用户

  1. 获取模型部署实例的 OCID 。在动态组字符串中输入 OCID。

    ALL {resource.type = 'fnfunc', resource.id = 'ocid1.datasciencemodeldeployment.oc1.sa-saopaulo-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    

    resource.id 是以前在“模型部署”控制台屏幕中获取的 OCID。

    img_4.png

  2. 创建策略以允许动态组。有关详细信息,请参阅模型部署策略

    allow dynamic-group hoshikawa_datascience to {DATA_SCIENCE_MODEL_DEPLOYMENT_PREDICT} in tenancy
    allow dynamic-group hoshikawa_datascience to manage data-science-model-deployments in tenancy
    

    img_4.png

任务 5:测试 API

现在,让我们在 OCI 数据科学中模拟应用对模型部署服务的 OAuth2 请求。

  1. 获取将客户端 ID客户端密钥传递给 Oracle Identity Cloud Service 提供程序的令牌。

    img_2.png

  2. 输入 OCI API Gateway 部署端点并选择 POST REST 请求。复制 access_token 值并传递到 OCI API Gateway 部署。请记住,令牌的持续时间为一小时。

    img_5.png

    这就是结果!

    img.png

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心