

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为设置 OAuth 2.0 客户端凭据身份验证 ServiceNow
<a name="kb-managed-servicenow-oauth2-setup"></a>

使用带有 OAuth 2.0 客户端凭证 (2LO) 的 T ServiceNow able API 进行身份验证。在 Amazon Bedrock 中配置数据源之前，请在您的 ServiceNow 实例中完成以下所有步骤。

## 第 1 步：启用客户凭证授权类型
<a name="kb-managed-servicenow-oauth2-step1"></a>

1. 在中 ServiceNow，导航到`sys_properties.list`使用筛选器导航器。

1. 使用以下值创建新的系统属性：
   + **名称** – `glide.oauth.inbound.client.credential.grant_type.enabled`
   + **类型** – `true | false`
   + **值** – `true`

## 第 2 步：创建专用服务账户
<a name="kb-managed-servicenow-oauth2-step2"></a>

1. 导航到**用户管理 ** > ** 用户**。

1. 选择 “**新建” ** 并填写表格：
   + **用户 ID ** — 描述性名称（例如，`svc.amazon.quick.kb`）。
   + **仅限 Web 服务访问权限 **-已选中。这可以防止交互式登录。
   + **密码 ** — 设置安全性高的密码。连接器使用 OAuth，但创建帐户需要密码。

1. 选择**提交**。

## 第 3 步：分配服务帐号角色
<a name="kb-managed-servicenow-oauth2-step3"></a>

1. 打开服务帐户（**用户管理 ** > ** 用户 ** > 您的服务帐户）。

1. 在**角色**选项卡下，选择**编辑**并添加以下角色：
   + `knowledge_admin`— 对所有知识库文章的完整阅读权限。绕过每 KB 的用户标准限制。
   + `catalog_admin`— 对所有服务目录项的完全读取权限。绕过每个目录的限制。

1. 选择**保存**。

**注意**  
保存后，您总共会看到大约 14 个角色。 ServiceNow自动从`_admin`父角色继承包含的角色。您只能手动分配步骤 2 中列出的两个角色（`knowledge_admin`和`catalog_admin`）。不要分配`admin``itil`、或`snc_read_only`角色。

## 第 4 步：注册 OAuth 应用程序
<a name="kb-managed-servicenow-oauth2-step4"></a>

1. 导航到**系统 OAuth ** > ** 应用程序注册表。**

1. 选择 “**新**建” ** > “为外部客户端创建 OAuth API 端点”。**

1. 填写表格：
   + **名称 ** — 描述性名称（例如，`Amazon-Quick-KB-Client`）。
   + **重定向 URL **-留空。不是客户端凭证流程所必需的。

1. 选择**提交**。

1. 立即复制**客户端 ID ** 和**客户端密钥**。客户端密钥仅显示一次。

**重要**  
必须使用拦截器页面来创建应用程序。不要通过直接插入`oauth_entity`表来创建记录。

## 第 5 步：配置 OAuth 应用程序
<a name="kb-managed-servicenow-oauth2-step5"></a>

1. Re-open 应用程序注册表列表中的应用程序记录。

1. 如果 ** OAuth 应用程序用户**字段不可见，**请使用配置 ** > ** 表单生成器进行添加。**

1. 设置以下字段：
   + **OAuth 应用程序用户 **-您的服务帐号（例如）。`svc.amazon.quick.kb`
   + **范围限制 ** —`Broadly scoped`.
   + **客户类型 ** —`integration_as_a_service`.

1. 选择**更新**。

## 第 6 步：配置 API 访问策略
<a name="kb-managed-servicenow-oauth2-step6"></a>

如果没有 API 访问策略，则对令牌进行身份验证，但是 Table API 返回 HTTP 401。完成以下两个子步骤。

**创建入站身份验证配置文件**

1. 导航到**系统 Web 服务 ** > ** API 访问策略 ** > ** 入站身份验证配置文件**。

1. 选择 “**新建” ** 并设置：
   + **名称 ** — 例如，`Amazon-Quick-KB-Client-Profile`.
   + **Type** – `OAuth`。
   + **OAuth 实体 **-选择您的 OAuth 应用程序。

1. 选择**提交**。

1. Re-open 个人资料。在**身份验证策略**相关列表中，选择**编辑**并添加**允许访问策略**。选择**保存**。

**创建 REST API 访问策略**

1. 导航到**系统 Web 服务 ** > ** API 访问策略 ** > ** REST API 访问策略**。

1. 选择 “**新建” ** 并设置：
   + **名称 ** — 例如，`Table API Oauth access policy`.
   + **REST API ** —`Table API`.
   + **REST API 路径 ** —`now/table`.
   + **适用于所有方法 **-已选中。
   + **应用于所有资源 **-已选中。
   + **应用于所有表 **-已选中。
   + **适用于所有版本 **-已选中。

1. 选择**提交**。

1. Re-open 政策。在**入站身份验证配置文件**相关列表中，选择**编辑**并添加您的入站身份验证配置文件。选择**保存**。

## 第 7 步：验证 OAuth 流程
<a name="kb-managed-servicenow-oauth2-step7"></a>

在配置数据源之前，请验证 OAuth 流程是否端到端运行。

**申请代币：**

```
curl -s -X POST "https://{{INSTANCE}}.service-now.com/oauth_token.do" \
  -d "grant_type=client_credentials" \
  -d "client_id={{CLIENT_ID}}" \
  -d "client_secret={{CLIENT_SECRET}}"
```

**验证 Table API 访问权限：**

```
curl -s "https://{{INSTANCE}}.service-now.com/api/now/table/kb_knowledge?sysparm_limit=1" \
  -H "Authorization: Bearer {{ACCESS_TOKEN}}"
```

下表描述了每个验证结果和要采取的操作。


**验证结果**  

| 结果 | 含义 | 操作 | 
| --- | --- | --- | 
| 带数据的 HTTP 200 | 工作正常 | 继续创建密钥管理器密钥。 | 
| 带有空数组的 HTTP 200 | 缺少knowledge\_admin角色 | 将knowledge\_admin角色分配给服务帐号。 | 
| HTTP 401 | 未配置 API 访问策略 | 验证入站身份验证配置文件和 REST API 访问策略配置。 | 

## 第 8 步：创建 Secrets Manager 密钥
<a name="kb-managed-servicenow-oauth2-step8"></a>

使用以下键值对将凭证存储在与知识库 AWS 区域 相同的 AWS Secrets Manager 密钥中：

```
{
    "clientId": "{{your-client-id}}",
    "clientSecret": "{{your-client-secret}}",
    "instanceUrl": "https://{{YOUR_INSTANCE}}.service-now.com"
}
```


**秘密领域**  

| 字段 | 说明 | 
| --- | --- | 
| clientId | 步骤 4 中的应用程序客户端 ID。 | 
| clientSecret | 应用程序客户端密钥在创建时在步骤 4 中显示。 | 
| instanceUrl | 完整 ServiceNow 实例 URL（包括https://，无尾斜杠）。 | 

**重要**  
`instanceUrl`不得有末尾的斜杠。

使用以下命令创建密钥 AWS Command Line Interface：

```
aws secretsmanager create-secret \
  --name {{bedrock-servicenow-creds}} \
  --secret-string file://secret.json
```

记录响应中的秘密 ARN。您可以将其用作数据源`secretArn`。

## 后续步骤
<a name="kb-managed-servicenow-oauth2-next"></a>

存储密钥后，创建数据源。请参阅[连接 ServiceNow 数据源](kb-managed-ds-servicenow-connect.md)。