服务凭据

与AEMas a Cloud Service的集成必须能够安全地对AEM进行身份验证。 AEM开发人员控制台授予对服务凭据的访问权限,服务凭据用于促进外部应用程序、系统和服务以编程方式通过HTTP与AEM创作或发布服务交互。

服务凭据可能显示类似 本地开发访问令牌 但在几个关键方面却有所不同:

  • 服务凭据为 not 访问令牌,而不是用于 获取 访问令牌。
  • 服务凭据更为永久(每365天过期一次),除非被撤销,否则不会更改,而本地开发访问令牌会每天过期。
  • AEMas a Cloud Service环境的服务凭据映射到单个AEM技术帐户用户,而本地开发访问令牌将验证为生成访问令牌的AEM用户。
  • AEMas a Cloud Service环境有一个可映射到一个技术帐户AEM用户的服务凭据。 服务凭据不能用于与不同技术帐户AEM用户一样对同一AEMas a Cloud Service环境进行身份验证。

应将服务凭据及其生成的访问令牌以及本地开发访问令牌均保密,因为所有这三个令牌都可用于访问其各自的AEMas a Cloud Service环境

生成服务凭据

服务凭据生成分为两个步骤:

  1. 由Adobe IMS组织管理员进行的一次性服务凭据初始化
  2. 服务凭据JSON的下载和使用

服务凭据初始化

与本地开发访问令牌不同,服务凭据需要 一次性初始化 由Adobe组织IMS管理员下载。

初始化服务凭据

这是每个AEMas a Cloud Service环境的一次性初始化

  1. 确保您以以下方式登录:
    • 您的Adobe IMS组织管理员
    • 成员 Cloud Manager — 开发人员 IMS产品配置文件
    • 成员 AEM用户AEM管理员 上的IMS产品配置文件 AEM作者
  2. 登录到 AdobeCloud Manager
  3. 打开包含AEMas a Cloud Service环境的程序,以集成为
  4. 点按中环境旁边的省略号 环境 ,然后选择 开发人员控制台
  5. 在中点按 集成 选项卡
  6. 点按 获取服务凭据 按钮
  7. 服务凭据将初始化并显示为JSON

AEM Developer Console — 集成 — 获取服务凭据

初始化AEM作为Cloud Service环境的服务凭据后,您的Adobe IMS组织中的其他AEM开发人员可以下载这些凭据。

下载服务凭据

下载服务凭据

下载服务凭据的步骤与初始化的步骤相同。 如果尚未进行初始化,则用户在点按 获取服务凭据 按钮。

  1. 确保您已作为以下用户登录:
    • 成员 Cloud Manager — 开发人员 IMS产品配置文件(用于授予对AEM开发人员控制台的访问权限)
      • 沙盒AEMas a Cloud Service环境不需要 Cloud Manager — 开发人员 会员资格
    • 成员 AEM用户AEM管理员 上的IMS产品配置文件 AEM作者
  2. 登录到 AdobeCloud Manager
  3. 打开包含AEMas a Cloud Service环境的程序以与集成
  4. 点按中环境旁边的省略号 环境 ,然后选择 开发人员控制台
  5. 在中点按 集成 选项卡
  6. 点按 获取服务凭据 按钮
  7. 点按左上角的下载按钮,下载包含服务凭据值的JSON文件,并将文件保存到安全位置。
    • 如果服务凭据受损,请立即联系Adobe支持部门以撤销它们

安装服务凭据

服务凭据提供生成JWT所需的详细信息,JWT用于交换用于通过AEMas a Cloud Service进行身份验证的访问令牌。 服务凭据必须存储在安全位置,外部应用程序、系统或服务可以使用服务凭据访问AEM。 每个客户管理服务凭据的方式和位置将是唯一的。

为了简单起见,本教程将通过命令行将服务凭据传递到中,但请与您的IT安全团队合作,了解如何根据贵组织的安全准则存储和访问这些凭据。

  1. 复制 下载了服务凭据JSON 到名为 service_token.json 在项目的根中
    • 但请记住,切勿向Git提交任何凭据!

使用服务凭据

服务凭据(一个格式完整的JSON对象)与JWT或访问令牌不同。 服务凭据(包含私钥)而是用于生成JWT,JWT将与Adobe IMS API交换以获取访问令牌。

服务凭据 — 外部应用程序

  1. 将服务凭据从AEM Developer Console下载到安全位置
  2. 外部应用程序需要以编程方式与AEMas a Cloud Service环境交互
  3. 外部应用程序从安全位置读取服务凭据
  4. 外部应用程序使用服务凭据中的信息来构建JWT令牌
  5. JWT令牌将发送到Adobe IMS以交换访问令牌
  6. Adobe IMS会返回一个访问令牌,可用于访问AEMas a Cloud Service
    • 访问令牌可能已请求到期。 最好保持访问令牌的生命周期较短,并在需要时进行刷新。
  7. 外部应用程序向AEM发出HTTP请求,并将访问令牌作为载体令牌添加到HTTP请求的授权标头中
  8. AEMas a Cloud Service接收HTTP请求、验证请求并执行HTTP请求请求所请求的工作,并将HTTP响应返回到外部应用程序

外部应用程序的更新

要使用服务凭据访问AEMas a Cloud Service,必须通过3种方式更新外部应用程序:

  1. 在服务凭据中阅读
    • 为了简单起见,我们将从下载的JSON文件中读取这些内容,但在实际使用场景中,必须按照贵组织的安全准则安全地存储服务凭据
  2. 从服务凭据生成JWT
  3. 将JWT交换为访问令牌
    • 当存在服务凭据时,我们的外部应用程序在访问AEMas a Cloud Service时会使用此访问令牌而不是本地开发访问令牌

在本教程中,Adobe @adobe/jwt-auth npm模块用于两者,(1)从服务凭据生成JWT,(2)在单个函数调用中将其交换为访问令牌。 如果您的应用程序不基于JavaScript,请查看 其他语言的示例代码 以了解如何从服务凭据创建JWT,并将其与Adobe IMS交换为访问令牌。

阅读服务凭据

查看 getCommandLineParams() 并查看,我们可以使用与本地开发访问令牌JSON中读取的代码一样的代码在服务凭据JSON文件中读取。

function getCommandLineParams() {
    ...

    // Read in the credentials from the provided JSON file
    // Since both the Local Development Access Token and Service Credentials files are JSON, this same approach can be re-used
    if (parameters.file) {
        parameters.developerConsoleCredentials = JSON.parse(fs.readFileSync(parameters.file));
    }

    ...
    return parameters;
}

为访问令牌创建JWT和交换

读取服务凭据后,将使用这些凭据生成JWT,然后与Adobe IMS API交换访问令牌,以用于访问AEMas a Cloud Service。

此示例应用程序基于Node.js,因此最好使用 @adobe/jwt-auth npm模块,以便于(1)生成JWT并(20次与Adobe IMS交换) 如果您的应用程序是使用其他语言开发的,请查看 相应的代码示例 了解如何使用其他编程语言构建到Adobe IMS的HTTP请求。

  1. 更新 getAccessToken(..) 用于检查JSON文件内容并确定它是否表示本地开发访问令牌或服务凭据。 这可以通过检查 .accessToken 属性,该属性仅存在于本地开发访问令牌JSON中。

    如果提供了服务凭据,则应用程序会生成JWT并与Adobe IMS交换JWT以获取访问令牌。 我们将使用 @adobe/jwt-auth's auth(...) 函数,该函数生成JWT并在单个函数调用中为访问令牌交换JWT。 的参数 auth(..)由特定信息组成的JSON对象 可从服务凭据JSON中获取,如代码中所述。

     async function getAccessToken(developerConsoleCredentials) {
    
         if (developerConsoleCredentials.accessToken) {
             // This is a Local Development access token
             return developerConsoleCredentials.accessToken;
         } else {
             // This is the Service Credentials JSON object that must be exchanged with Adobe IMS for an access token
             let serviceCredentials = developerConsoleCredentials.integration;
    
             // Use the @adobe/jwt-auth library to pass the service credentials generated a JWT and exchange that with Adobe IMS for an access token.
             // If other programming languages are used, please see these code samples: https://www.adobe.io/authentication/auth-methods.html#!AdobeDocs/adobeio-auth/master/JWT/samples/samples.md
             let { access_token } = await auth({
                 clientId: serviceCredentials.technicalAccount.clientId, // Client Id
                 technicalAccountId: serviceCredentials.id,              // Technical Account Id
                 orgId: serviceCredentials.org,                          // Adobe IMS Org Id
                 clientSecret: serviceCredentials.technicalAccount.clientSecret, // Client Secret
                 privateKey: serviceCredentials.privateKey,              // Private Key to sign the JWT
                 metaScopes: serviceCredentials.metascopes.split(','),   // Meta Scopes defining level of access the access token should provide
                 ims: `https://${serviceCredentials.imsEndpoint}`,       // IMS endpoint used to obtain the access token from
             });
    
             return access_token;
         }
     }
    

    现在,取决于通过JSON传入的JSON文件(本地开发访问令牌JSON或服务凭据JSON) file 命令行参数,应用程序将派生访问令牌。

    请记住,尽管服务凭据每365天过期一次,但JWT和相应的访问令牌会频繁过期,并且需要在它们过期之前进行刷新。 这可以通过使用 refresh_token 由Adobe IMS提供。.

  2. 实施这些更改,并从AEM开发人员控制台下载服务凭据JSON(为了简便起见,另存为 service_token.json 与此文件夹相同 index.js),执行应用程序以替换命令行参数 file with service_token.json,并更新 propertyValue 值,以便在AEM中显示效果。

    $ node index.js \
        aem=https://author-p1234-e5678.adobeaemcloud.com \
        folder=/wknd/en/adventures/napa-wine-tasting \
        propertyName=metadata/dc:rights \
        propertyValue="WKND Restricted Use" \
        file=service_token.json
    

    终端的输出将如下所示:

    200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json
    403 - Forbidden @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
    

    403 — 禁止 行,指示对AEMas a Cloud Service的HTTP API调用中出错。 尝试更新资产的元数据时,会出现这些403禁止错误。

    原因是服务凭据派生的访问令牌使用自动创建的技术帐户AEM用户对AEM的请求进行身份验证,默认情况下,该用户仅具有读权限。 要提供对AEM的应用程序写入访问权限,必须向与访问令牌关联的技术帐户AEM用户授予在AEM中的权限。

在AEM中配置访问权限

服务凭据派生的访问令牌使用的技术帐户AEM用户,该用户在参与者AEM用户组中具有成员资格。

服务凭据 — 技术帐户AEM用户

在AEM中存在技术帐户AEM用户(在首次通过访问令牌发出HTTP请求后)后,可以像管理其他AEM用户一样管理此AEM用户的权限。

  1. 首先,打开从AEM开发人员控制台下载的服务凭据JSON ,找到技术帐户的AEM登录名,然后找到 integration.email 值,它应类似于: 12345678-abcd-9000-efgh-0987654321c@techacct.adobe.com.
  2. 以AEM管理员身份登录到相应AEM环境的创作服务
  3. 导航到 工具 > 安全性 > 用户
  4. 在AEM用户的 登录名 在步骤1中标识,并打开 属性
  5. 导航到 群组 ,然后添加 DAM用户 群组(用作对资产的写入访问权限)
  6. 点按 保存并关闭

在AEM中拥有资产写入权限的技术帐户,请重新运行应用程序:

$ node index.js \
    aem=https://author-p1234-e5678.adobeaemcloud.com \
    folder=/wknd/en/adventures/napa-wine-tasting \
    propertyName=metadata/dc:rights \
    propertyValue="WKND Restricted Use" \
    file=service_token.json

终端的输出将如下所示:

200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_277654931.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_286664352.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_239751461.jpg.json
200 - OK @ https://author-p1234-e5678.adobeaemcloud.com/api/assets/wknd/en/adventures/napa-wine-tasting/AdobeStock_280313729.jpg.json

验证更改

  1. 登录已更新的AEMas a Cloud Service环境(使用 aem 命令行参数)
  2. 导航到 资产 > 文件
  3. 在指定的资产文件夹中导航它 folder 命令行参数,例如 WKND > 英语 > 冒险 > 纳帕品酒会
  4. 打开 属性 文件夹中的任何资产
  5. 导航到 高级 选项卡
  6. 例如,查看已更新属性的值 版权 已映射到已更新的 metadata/dc:rights JCR属性,该属性现在反映 propertyValue 参数,例如 WKND受限使用

WKND限制使用元数据更新

恭喜!

现在,我们已使用本地开发访问令牌以及生产就绪的服务到服务访问令牌,以编程方式访问AEMas a Cloud Service!

在此页面上