

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

# 使用 Amazon Cognito 进行身份验证
<a name="authenticating-using-cognito"></a>

您可以使用 Amazon Cognito 身份验证作为直接使用 AWS Identity and Access Management (IAM) 用户进行前端 SDK 请求的替代方案。

Amazon Cognito 为您的 Web 和移动应用程序提供身份验证、授权和用户管理。您可以使用带有 Amazon Location 的 Amazon Cognito 未经身份验证的身份池作为应用程序检索限定范围内的临时凭证的一种方式。 AWS 

想要了解更多信息，请参阅 *Amazon Cognito 开发人员指南*中的[用户池入门](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-user-pools.html)。

出于以下原因，您可能需要使用这种形式的身份验证：
+ **未经身份验证的用户** – 如果您的网站包含匿名用户，则可以使用 Amazon Cognito 身份池。

  想要了解更多信息，请在 [使用 Amazon Cognito 进行身份验证](#authenticating-using-cognito) 上参阅本部分。
+ **您自己的身份验证** – 如果您想使用自己的身份验证流程或组合使用多种身份验证方法，则可以使用 Amazon Cognito 联合身份。

  有关更多信息，请参阅《Amazon Cognito 开发人员指南》**中的[开始使用联合身份](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html)。

## 使用 Amazon Cognito 和 Amazon Location Service
<a name="cognito-and-location"></a>

您可以将与未经身份验证的身份角色关联的 AWS Identity and Access Management (IAM) 策略用于以下操作：

------
#### [ Maps ]

地图操作列表
+ `geo-maps:GetStaticMap`
+ `geo-maps:GetTile`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo-maps:region::provider/default
```

------
#### [ Places ]

地点操作列表：
+ `geo-places:Geocode`
+ `geo-places:ReverseGeocode`
+ `geo-places:SearchNearby`
+ `geo-places:SearchText`
+ `geo-places:Autocomplete`
+ `geo-places:Suggest`
+ `geo-places:GetPlace`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo-places:region::provider/default
```

------
#### [ Routes ]

路线操作列表：
+ `geo-routes:CalculateRoutes`
+ `geo-routes:CalculateRouteMatrix`
+ `geo-routes:CalculateIsolines`
+ `geo-routes:OptimizeWaypoints`
+ `geo-routes:SnapToRoads`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo-routes:region::provider/default
```

------
#### [ Geofences and Trackers ]

地理围栏和跟踪器操作列表
+ `geo:GetGeofence`
+ `geo:ListGeofences`
+ `geo:PutGeofence`
+ `geo:BatchDeleteGeofence`
+ `geo:BatchPutGeofence`
+ `geo:BatchEvaluateGeofences`
+ `geo:GetDevicePosition*`
+ `geo:ListDevicePositions`
+ `geo:BatchDeleteDevicePositionHistory`
+ `geo:BatchGetDevicePosition`
+ `geo:BatchUpdateDevicePosition`

**注意**  
上述操作的资源名称为：  

```
arn:aws:geo:region:accountID:tracker/ExampleTracker
```

------
#### [ Previous version ]

先前版本操作列表：
+ `geo:GetMap*`
+ `geo:SearchPlaceIndexForText`
+ `geo:SearchPlaceIndexForPosition`
+ `geo:GetPlace`
+ `geo:CalculateRoute`
+ `geo:CalculateRouteMatrix`

**注意**  
上述操作的资源名称为：  
**地图**  

```
arn:aws:geo:region:accountID:map/ExampleMap
```
**地方**  

```
arn:aws:geo:region:accountID:place-index/ExamplePlaceIndex
```
**Routes**  

```
arn:aws:geo:region:accountID:route-calculator/ExampleCalculator
```

------

## 创建 Amazon Cognito 身份池
<a name="cognito-create-user-pool"></a>

您可以创建 Amazon Cognito 身份池，允许未经身份验证的访客通过 Amazon Cognito 控制台、或 Amazon Cognito 访问您的应用程序。 AWS CLI APIs

**重要**  
您创建的资源池必须与您正在使用的 Amazon Location Service 资源位于相同 AWS 账户 且所在的 AWS 区域相同。

------
#### [ Console ]

**使用 Amazon Cognito 控制台创建身份池**

1. 转到 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)。

1. 选择 **Manage Identity Pools**（管理身份池）。

1. 选择**创建新身份池**，然后输入身份池的名称。

1. 从**未经验证的身份**可折叠部分中，选择**启用未经验证的身份的访问权限**。

1. 选择**创建池**。

1. 选择您希望用于身份池的 IAM 角色。

1. 展开**查看详情**。

1. 在**未经身份验证的身份**下，输入角色名称。

1. 展开**查看策略文档**部分，然后选择**编辑**以添加您的策略。

1. 添加您的策略来授予对您的资源的访问权限。
**注意**  
请参阅上面的 [使用 Amazon Cognito 和 Amazon Location Service](#cognito-and-location)部分了解操作列表。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
     Sid": "RoutesReadOnly",
     Effect": "Allow",
     Action": [
           // add comma separated value from the previous section
         ],
     Resource": "value from previous section"
       }
     ]
   }
   ```

1. 选择**允许**以创建您的身份池。

------

## 在 Web 中使用 Amazon Cognito 身份池
<a name="identity-pool-js"></a>

以下示例将您创建的未经身份验证的身份池交换为凭证，然后使用这些凭证调用 `CalculateIsolines`。为了简化这项工作，该示例使用 Amazon Location [如何使用身份验证帮助程序](how-to-auth-helper.md) 步骤。这可以代替获取凭证和刷新凭证。

此示例使用适用于 JavaScript v3 的 AWS SDK。

```
import { GeoRoutesClient, CalculateIsolinesCommand , } from "@aws-sdk/client-geo-routes"; // ES Modules import
import { withIdentityPoolId } from "@aws/amazon-location-utilities-auth-helper";

const identityPoolId = "<identity pool ID>"; // for example, us-east-1:1sample4-5678-90ef-aaaa-1234abcd56ef

const authHelper = await withIdentityPoolId(identityPoolId);

const client = new GeoRoutesClient({
    ...authHelper.getClientConfig(),
    region: "<region>", // The region containing the identity pool
});

const input = {
    DepartNow: true,
    TravelMode: "Car",
    Origin: [-123.12327, 49.27531],
    Thresholds: {
        Time: [5, 10, 30],
    },
};

const command = new CalculateIsolinesCommand(input);
const response = await client.send(command);

console.log(JSON.stringify(response, null, 2))
```