使用用户池API和授权服务器 - Amazon Cognito

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

使用用户池API和授权服务器

当您想要注册、登录和管理用户池中的用户时,有两种选择。

  1. 您的用户池端点包括托管 UI联合身份验证端点。它们构成了一个公共网页包,当您为用户池选择域时,Amazon Cognito 会激活这些网页。要快速开始使用 Amazon Cognito 用户池的身份验证和授权功能,包括注册、登录、密码管理和多因素身份验证页面 (MFA),请使用托管 UI 的内置用户界面。其他用户池端点便于使用第三方身份提供商进行身份验证(IdPs)。他们执行的服务包括以下各项。

    1. 服务提供商回调终端节点,用于来自您的经过身份验证的声明 IdPs,比如saml2/idpresponse和。oauth2/idpresponse当 Amazon Cognito 是您的应用程序和 IdP 之间的中间服务提供者(SP)时,回调端点代表服务。

    2. 提供有关您的环境的信息的端点,例如 oauth2/userInfojwks.json。当您的应用程序使用 AWS SDKs和 OAuth 2.0 库验证令牌或检索用户个人资料数据时,它会使用这些端点。

  2. Amazon Cognito 用户池API是一组工具,用于您的网络或移动应用程序,在您自己的自定义前端收集登录信息后,用于对用户进行身份验证。用户池API身份验证会生成以下 JSON Web 令牌。

    1. 带有来自您的用户的可验证属性声明的身份令牌。

    2. 一种访问令牌,它授权您的用户向服务端点创建经令牌授权的API请求。AWS

      注意

      默认情况下,来自用户池API身份验证的访问令牌仅包含aws.cognito.signin.user.admin范围。要生成具有其他范围的访问令牌,例如授权对第三方的请求API,请在身份验证期间通过您的用户池终端节点请求范围,或者在中添加自定义范围令牌生成前 Lambda 触发器。自定义访问令牌会增加您的 AWS 账单费用。

您可以将通常通过用户池端点登录的联合用户与其配置文件位于用户池本地 的用户相关联。本地用户仅存在于您的用户池目录中,无需通过外部 IdP 进行联合身份验证。如果您在AdminLinkProviderForUserAPI请求中将他们的联合身份关联到本地用户,则他们可以使用用户池登录API。有关更多信息,请参阅 将联合用户与现有用户配置文件关联

Amazon Cognito 用户池API具有双重用途。它创建和配置您的 Amazon Cognito 用户池资源。例如,您可以创建用户池、添加 AWS Lambda 触发器和配置托管 UI 域。用户池API还为本地用户和关联用户执行注册、登录和其他用户操作。

Amazon Cognito 用户池的示例场景 API

  1. 用户选择了您在应用程序中创建的“创建账户”按钮。他们输入电子邮件地址和密码。

  2. 您的应用程序发送SignUpAPI请求并在您的用户池中创建了一个新用户。

  3. 应用程序提示用户输入电子邮件确认代码。用户输入他们在电子邮件中收到的代码。

  4. 您的应用会发送包含用户确认码的ConfirmSignUpAPI请求。

  5. 应用程序提示您的用户输入用户名和密码,而用户输入其信息。

  6. 您的应用程序发送InitiateAuthAPI请求并存储 ID 令牌、访问令牌和刷新令牌。您的应用程序调用OIDC库来管理用户的令牌并为该用户维护持续会话。

在 Amazon Cognito 用户池中API,您无法登录通过 IdP 进行联合身份验证的用户。您必须通过用户池端点对这些用户进行身份验证。有关包含托管 UI 的用户池端点的信息,请参阅用户池端点和托管用户界面参考。联合用户可以在托管 UI 中开始登录并选择其 IdP,您也可以跳过托管 UI,将用户直接发送到您的 IdP 以进行登录。当你对的API请求对端点授权包含 IdP 参数时,Amazon Cognito 会以静默方式将您的用户重定向到 IdP 登录页面。

用户池端点示例场景

  1. 用户选择了您在应用程序中创建的“创建账户”按钮。

  2. 您可以向用户提供您注册开发人员凭证的社交身份提供者列表。您的用户选择了 Apple。

  3. 您的应用程序向 对端点授权 发出请求,提供者名称为 SignInWithApple

  4. 您的用户的浏览器会打开 Apple OAuth 授权页面。用户选择允许 Amazon Cognito 读取其个人资料信息。

  5. Amazon Cognito 确认 Apple 访问令牌并查询用户的 Apple 个人资料。

  6. 用户向您的应用程序出示 Amazon Cognito 授权代码。

  7. 应用程序与 令牌端点 交换授权码并存储 ID 令牌、访问令牌和刷新令牌。您的应用程序调用OIDC库来管理用户的令牌并为该用户维护持续会话。

用户池API和用户池端点支持各种场景,本指南中对此进行了介绍。以下各节探讨了用户池如何API进一步划分为支持您的注册、登录和资源管理要求的类别。

Amazon Cognito 用户池经过身份验证和未经身份验证的操作 API

Amazon Cognito 用户池既是资源管理接口API,又是面向用户的身份验证和授权接口,结合了其操作中遵循的授权模型。根据API操作的不同,您可能需要使用IAM凭证、访问令牌、会话令牌、客户端密钥或两者的组合来提供授权。对于许多用户身份验证和授权操作,您可以选择请求的经过身份验证和未经身份验证的版本。对于分发给用户的应用程序(例如移动应用程序),最佳安全实践是提供未经身份验证的操作;您无需在代码中包含任何密钥。

您只能在IAM策略中为IAM-经过身份验证的管理操作和分配权限IAM-经过身份验证的用户操作

IAM-经过身份验证的管理操作可以修改和查看您的用户池和应用程序客户端配置,就像在中所做的那样。 AWS Management Console

例如,要在UpdateUserPoolAPI请求中修改您的用户池,您必须出示 AWS 证书和IAM权限才能更新资源。

要在 AWS Command Line Interface (AWS CLI) 或中授权这些请求 AWS SDK,请使用环境变量或向请求添加IAM凭据的客户端配置来配置您的环境。有关更多信息,请参阅中的AWS 使用您的 AWS 凭证进行访问AWS 一般参考。您也可以直接向 Amazon Cognito 用户池的服务终端节点发送请求。API您必须使用嵌入到请求标头中的 AWS 凭证授权或签署 这些请求。有关更多信息,请参阅对AWS API请求进行签名

IAM-经过身份验证的管理操作
AddCustomAttributes
CreateGroup
CreateIdentityProvider
CreateResourceServer
CreateUserImportJob
CreateUserPool
CreateUserPoolClient
CreateUserPoolDomain
DeleteGroup
DeleteIdentityProvider
DeleteResourceServer
DeleteUserPool
DeleteUserPoolClient
DeleteUserPoolDomain
DescribeIdentityProvider
DescribeResourceServer
DescribeRiskConfiguration
DescribeUserImportJob
DescribeUserPool
DescribeUserPoolClient
DescribeUserPoolDomain
GetCSVHeader
GetGroup
GetIdentityProviderByIdentifier
GetSigningCertificate
GetUICustomization
GetUserPoolMfaConfig
ListGroups
ListIdentityProviders
ListResourceServers
ListTagsForResource
ListUserImportJobs
ListUserPoolClients
ListUserPools
ListUsers
ListUsersInGroup
SetRiskConfiguration
SetUICustomization
SetUserPoolMfaConfig
StartUserImportJob
StopUserImportJob
TagResource
UntagResource
UpdateGroup
UpdateIdentityProvider
UpdateResourceServer
UpdateUserPool
UpdateUserPoolClient
UpdateUserPoolDomain

IAM-经过身份验证的用户操作注册、登录、管理用户证书、修改和查看您的用户。

例如,您可以有一个服务器端应用程序层,为 Web 前端提供支持。您的服务器端应用程序是您信任的OAuth机密客户端,可以访问您的 Amazon Cognito 资源。要在应用程序中注册用户,您的服务器可以在AdminCreateUserAPI请求中包含 AWS 凭据。有关OAuth客户端类型的更多信息,请参阅 OAuth2.0 授权框架中的客户端类型

要在 AWS CLI 或中授权这些请求 AWS SDK,请使用环境变量或向请求添加IAM凭据的客户端配置来配置服务器端应用程序环境。有关更多信息,请参阅中的AWS 使用您的 AWS 凭证进行访问AWS 一般参考。您也可以直接向 Amazon Cognito 用户池的服务终端节点发送请求。API您必须使用嵌入到请求标头中的 AWS 凭证授权或签署 这些请求。有关更多信息,请参阅对AWS API请求进行签名

如果您的应用程序客户端有客户端密钥,则必须同时提供IAM凭据以及中的SecretHash参数或SECRET_HASH值(视操作而定)AuthParameters。有关更多信息,请参阅 计算密钥哈希值

IAM-经过身份验证的用户操作
AdminAddUserToGroup
AdminConfirmSignUp
AdminCreateUser
AdminDeleteUser
AdminDeleteUserAttributes
AdminDisableProviderForUser
AdminDisableUser
AdminEnableUser
AdminForgetDevice
AdminGetDevice
AdminGetUser
AdminInitiateAuth
AdminLinkProviderForUser
AdminListDevices
AdminListGroupsForUser
AdminListUserAuthEvents
AdminRemoveUserFromGroup
AdminResetUserPassword
AdminRespondToAuthChallenge
AdminSetUserMFAPreference
AdminSetUserPassword
AdminSetUserSettings
AdminUpdateAuthEventFeedback
AdminUpdateDeviceStatus
AdminUpdateUserAttributes
AdminUserGlobalSignOut

未经身份验证的用户操作注册、登录以及为您的用户启动密码重置。如果您希望互联网上的任何人注册并登录您的应用程序,请使用未经身份验证或公开的API操作。

例如,要在您的应用程序中注册用户,您可以分发一个不提供任何密钥特权访问权限的OAuth公共客户端。您可以通过未经身份验证的API操作SignUp注册此用户。

要在使用开发的公共客户端中发送这些请求 AWS SDK,您无需配置任何证书。您也可以直接向 Amazon Cognito 用户池API的服务终端节点发送请求,无需额外授权。

如果您的应用程序客户端有客户端密钥,则您必须在 AuthParameters 中提供 SecretHash 参数或 SECRET_HASH 值(取决于操作)。有关更多信息,请参阅 计算密钥哈希值

未经身份验证的用户操作
SignUp
ConfirmSignUp
ResendConfirmationCode
ForgotPassword
ConfirmForgotPassword
InitiateAuth

经过令牌授权的用户操作在用户已登录或开始登录流程之后,注销、管理其凭证、修改和查看用户。如果您不想在应用程序中分发密钥,并且想要使用用户自己的凭据来授权请求,请使用令牌授权的API操作。如果您的用户已完成登录,则必须使用访问令牌来授权他们的令牌授权API请求。如果您的用户正在进行登录,则必须使用 Amazon Cognito 在回复之前的API请求时返回的会话令牌来授权他们的令牌授权请求。

例如,在公共客户端中,您可能希望更新用户的配置文件,限制用户仅对自己的配置文件具有写入权限。要进行此更新,您的客户端可以在UpdateUserAttributesAPI请求中包含用户的访问令牌。

要在使用开发的公共客户端中发送这些请求 AWS SDK,您无需配置任何证书。在您的请求中包含 AccessTokenSession 参数。您也可以直接向 Amazon Cognito 用户池的服务终端节点发送请求。API要授权对服务端点的请求,请在请求POST正文中包含访问令牌或会话令牌。

要签署令牌授权操作的API请求,请将访问令牌作为Authorization标题包含在请求中,格式为。Bearer <Base64-encoded access token>

经过令牌授权的用户操作 AccessToken 会话
RespondToAuthChallenge
ChangePassword
GetUser
UpdateUserAttributes
DeleteUserAttributes
DeleteUser
ConfirmDevice
ForgetDevice
GetDevice
ListDevices
UpdateDeviceStatus
GetUserAttributeVerificationCode
VerifyUserAttribute
SetUserSettings
SetUserMFAPreference
GlobalSignOut
AssociateSoftwareToken
UpdateAuthEventFeedback
VerifySoftwareToken
RevokeToken¹

¹ RevokeToken 将刷新令牌作为参数。刷新令牌用作授权令牌和目标资源。