

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

# 使用外部身份验证
<a name="external-authentication"></a>

默认情况下，Amazon DCV 客户端身份验证委派给底层操作系统。对于 Windows Amazon DCV 服务器，将身份验证委托给。 WinLogon在 Linux 和 macOS 的 Amazon DCV 服务器中，身份验证委托给 Linux PAM。

您可以将 Amazon DCV 配置为使用外部身份验证服务器对客户端进行身份验证。这样，您就可以使用现有的身份验证系统了。对于外部身份验证，Amazon DCV 利用您的现有登录机制，并将身份验证委派给外部身份验证服务器。

外部身份验证验证用户是否具有 DCV 服务器访问权限，从而决定是否允许使用会话创建功能。与**系统**身份验证不同，外部身份验证不会根据底层操作系统验证您的用户身份，除非您将自己的外部身份验证器设置为这样做。

[DCV Session Manager](https://docs.aws.amazon.com/dcv/latest/sm-admin/what-is-sm.html) 内置一个外部身份验证器。要使用此功能，您的 DCV 服务器需要使用会话管理器地址设置[auth-token-verifier](https://docs.aws.amazon.com/dcv/latest/sm-admin/configure-dcv-server.html)参数。

要使用外部身份验证服务器，您必须具备以下条件：
+ **登录机制** - 这是用户登录时使用的前端机制。它应该能够使用现有的凭证验证系统验证您的用户，并且应该能够生成令牌并将其提供给 Amazon DCV 服务器。有关更多信息，请参阅 [使用令牌](#using-token)。
+ **身份验证服务器** - 这是对登录机制生成的令牌进行身份验证的服务器。该服务器应该能够从 Amazon DCV 服务器接收包含令牌的 HTTP（S）POST 请求，执行必要的身份验证，然后将响应发回到 Amazon DCV 服务器。有关实施身份验证服务器的更多信息，请参阅[身份验证服务要求](#configure-authenticator)。
+ **Amazon DCV 服务器配置** - Amazon DCV 服务器必须配置为使用外部身份验证服务器。有关更多信息，请参阅 [Amazon DCV 服务器配置](#configure-server)。

**Topics**
+ [Amazon DCV 服务器配置](#configure-server)
+ [使用令牌](#using-token)
+ [身份验证服务要求](#configure-authenticator)

## Amazon DCV 服务器配置
<a name="configure-server"></a>

您必须将 Amazon DCV 服务器配置为使用外部身份验证服务。

------
#### [ Windows Amazon DCV server ]

**在 Windows 上指定外部身份验证服务器**

1. 打开 Windows 注册表编辑器。

1. 导航到 **HKEY\$1USERS\$1 S-1-5-18\$1 Software\$1\$1 com\$1 n icesoftwareGSettings\$1 dcv**\$1 key。

1. 在[安全**auth-token-verifier**参数中找到该参数](config-param-ref.md#security)。

1. 请执行以下操作之一：
   + 对于**值数据**，输入外部身份验证服务器的 URL 和用于通信的端口，格式如下所示：`url:port`。  
**Example**  

     例如，如果您使用的是 DcvSimpleExternalAuthenticator，请指定以下内容：`http://127.0.0.1:8444`。
   + 如果安全部分中没有**auth-token-verifier**参数，请将其添加到 PowerShell。请参阅[修改配置参数](https://docs.aws.amazon.com/dcv/latest/adminguide/config-param-ref-modify.html)。

1. 关闭 Windows 注册表编辑器。

1. [停止](manage-stop.md)并[重新启动](manage-start.md) Amazon DCV 服务器。

------
#### [ Linux Amazon DCV server ]

**在 Linux 上指定外部身份验证服务器**

1. 导航到 `/etc/dcv/`，并使用您常用的文本编辑器打开 `dcv.conf`。

1. 找到 `[security]` 部分中的 `auth-token-verifier` 参数，并将现有值替换为外部身份验证服务器的 URL 和用于通信的端口，格式如下所示：`url:port`。例如，如果您使用的是 DcvSimpleExternalAuthenticator，请指定以下内容：`http://127.0.0.1:8444`。

   如果 `auth-token-verifier` 部分中没有 `[security]` 参数，则使用以下格式手动添加此参数：

   ```
   [security] auth-token-verifier=url:port
   ```

1. 保存并关闭 文件。

------
#### [ macOS Amazon DCV server ]

**在 macOS 上指定外部身份验证服务器**

1. 导航到 `/etc/dcv/`，并使用您常用的文本编辑器打开 `dcv.conf`。

1. 找到 `[security]` 部分中的 `auth-token-verifier` 参数，并将现有值替换为外部身份验证服务器的 URL 和用于通信的端口，格式如下所示：`url:port`。例如，如果您使用的是 DcvSimpleExternalAuthenticator，请指定以下内容：`http://127.0.0.1:8444`。

   如果 `auth-token-verifier` 部分中没有 `[security]` 参数，则使用以下格式手动添加此参数：

   ```
   [security] auth-token-verifier=url:port
   ```

1. 保存并关闭 文件。

------

## 使用令牌
<a name="using-token"></a>

在生成令牌后，您必须能够将其发送到 Amazon DCV 服务器。对于 Web 浏览器客户端，将令牌附加到连接 URL 中，如下所示：

```
https://server_hostname_or_IP:port/?authToken=token#session_id
```

例如：

```
https://my-dcv-server.com:8443/?authToken=1234567890abcdef#my-session
```

## 身份验证服务要求
<a name="configure-authenticator"></a>

您的自定义身份验证服务可以在 Amazon DCV 服务器的同一主机上运行，也可以在单独的主机上运行。身份验证服务必须侦听来自 Amazon DCV 服务器的 HTTP（S）POST 请求。

下面显示了 Amazon DCV 服务器使用的 POST 请求格式。

```
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
sessionId=session_id&authenticationToken=token&clientAddress=client_address
```

您的身份验证服务负责确定提供的令牌是否有效。

在验证令牌后，身份验证服务器必须将响应返回到 Amazon DCV 服务器。响应正文必须包含以下内容之一，具体取决于身份验证过程的结果：
+ 如果身份验证成功，身份验证服务将返回结果 `yes` 和用户标识符。例如：

  ```
  <auth result="yes"><username>username</username></auth>
  ```
+ 如果身份验证失败，身份验证服务将返回结果 `no`。例如：

  ```
  <auth result="no"><message>message</message></auth>
  ```

### DcvSimpleExternalAuthenticator
<a name="simple-auth"></a>

Amazon DCV 附带了一个名为的参考外部身份验证服务器。`DcvSimpleExternalAuthenticator` DcvSimpleExternalAuthenticator 是一个 Python 脚本，您可以使用它作为创建自己的自定义身份验证服务器的起点。

DcvSimpleExternalAuthenticator 服务器支持 HTTP 和 HTTPS，并且必须运行在安装了 Amazon DCV 服务器的同一台服务器上。默认情况下， DcvSimpleExternalAuthenticator 监听端口`8444`上的请求。如果需要，您可以更改端口。为此，请使用常用的文本编辑器打开 `/etc/dcv/simpleextauth.conf`，找到 `EXTAUTH_PORT` 参数，然后将现有值替换为所需的端口号。

要使用 DcvSimpleExternalAuthenticator，必须安装`nice-dcv-simple-external-authenticator`软件包。有关更多信息，请参阅 [安装 Amazon DCV 服务器](setting-up-installing-linux-server.md#linux-server-install)。

### 使用简单外部身份验证器
<a name="usage"></a>



1. 导航到您的身份验证目录。

   `sudo mkdir -p /var/run/dcvsimpleextauth`

1. 生成您的身份验证令牌。  
**Example**  

   在该示例中，`123456` 是示例身份验证器令牌，`session-123` 是示例会话 ID，`username` 是用户。

   `echo "123456" | sudo dcvsimpleextauth add-user --session session-123 --auth-dir /var/run/dcvsimpleextauth/ --user username --append` 

1. 启动您的服务器。

   `sudo dcvsimpleextauth --port 8444 --auth-dir /var/run/dcvsimpleextauth/ start-server`

1. 在服务器运行后，测试配置以进行验证。  
**Example**  

   再次使用该示例，测试将按以下方式运行：

   `curl -k http://localhost:8444 -d sessionId=session-123 -d authenticationToken=123456`

   如果成功，您将收到身份验证结果 `yes`。