如何使登录通过亚马逊认知REST API(用于用户池)在没有官方SDK?的平台上进行--注意,我要求的是用户池,而不是身份池。
提要
提供3种登录:
--我正在使用第二个(与用户池一起使用)
Amazon为android、iOS、javascript、Xamarin等提供了几个SDK,并且为在官方SDK支持的平台上构建其他平台提供REST API。我正在为另一个平台构建一个应用程序,因此,REST是我唯一的方法,因为我的平台没有官方的SDK。
认知REST为“注册”、“忘记密码”、“确认验证”等提供了各种端点,但令人惊讶的是, REST没有任何简单的登录/登录端点。
我有所有官方的CLI,用于“注册用户”、“确认注册”、“更改密码”、“验证电话号码”、“忘记密码”等。令人惊讶的是,在登录时没有提到CLI。I希望有一些类似于"$ aws cognito-idp log-in
“的CLI,就像"$ aws cognito-idp sign-up
”或"$ aws cognito-idp forgot-password
“等。
另外,在本入门教程中,它讨论了“*在用户的成功身份验证之后,应该对接收到的令牌做些什么”。然而,它并没有讨论如何使用使成功的身份验证首先在认知用户池API中进行。示例仅适用于Android、iOS、javascript。对于没有SDK的平台,没有可用的身份验证示例。
因此,如何在没有官方SDK?的平台上,通过Amazon认知REST API(用于用户池)进行登录。
发布于 2016-08-20 05:42:11
更新:
正如您在下面的注释中所指出的,身份验证流程记录在这里:http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html。这可能有助于澄清身份验证流。
这在某种程度上违反了直觉,但对于那些不希望用户显式登录的移动应用程序来说,它确实是有意义的,而是为用户随身携带令牌。注意,在用于iOS的AWS用户池SDK中有一个显式的signin (登录) API。我没有使用它,但是我想它只是一个备用的客户端API来通过相同的InitiateAuth()
,然后是一个RespondToAuthChallenge()
流。iOS signin示例记录在这里- IOS SDK示例:在用户中注册
原文:
启动auth的认知用户池API文档是可在这里找到。
如果您在SDK的某个SDK中实现了一个用户池应用程序(我在Swift for iOS中实现了一个应用程序),它的工作方式就变得更清晰了,因为JSON响应的日志记录是冗长的,如果您查看日志,您可以看到发生了什么事情。
但假设我理解您的问题:总之,您应该使用InitiateAuth()
,对此的响应(来自认知用户池服务器)是一个挑战。然后执行RespondToAuthChallenge()
( API文档中也有文档),对此的响应是身份验证结果-假设密码/会话/令牌已被接受。
这两件事的结合,我相信,你所谓的登录,它的工作就像一个登录。在API中,设置它的方式是在用户未经身份验证时尝试获取用户信息,从而启动该InitiateAuth()
,并且(无论如何,在iOS中)该API会对您编写的代码进行回调,以请求密码,并发送RespondToAuthChallenge()
请求等。
发布于 2018-11-16 18:45:24
这个curl
命令适用于我:
curl -X POST --data @aws-auth-data.json \
-H 'X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth' \
-H 'Content-Type: application/x-amz-json-1.1' \
https://cognito-idp.us-east-1.amazonaws.com/
其中aws-auth-data.json
是:
{
"AuthParameters" : {
"USERNAME" : "yourusername@example.com",
"PASSWORD" : "yourpassword"
},
"AuthFlow" : "USER_PASSWORD_AUTH",
"ClientId" : "75........................"
}
用户池客户端必须允许USER_PASSWORD_AUTH
才能工作--这是AWS端的设置。
发布于 2020-11-06 15:56:54
只是为了补充@andrewjj的答案。您可能会得到一个挑战(NEW_PASSWORD_REQUIRED)作为InitiateAuth响应。这是当你被要求更换护照时,在最初的登录。
您可以使用Postman
或curl
命令。本例期望使用邮递员。
将其添加到Body
中作为raw
值
{
"AuthParameters": {
"USERNAME": "youremail@example.com",
"PASSWORD": "temporary-password",
},
"AuthFlow": "USER_PASSWORD_AUTH",
"ClientId": "2s........................"
}
设置headers
X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth
Content-Type: application/x-amz-json-1.1
向https://cognito-idp.us-east-1.amazonaws.com/
发送请求,您可能需要更改区域。
如果收到此响应,则可以继续执行步骤2。
{
"AuthenticationResult": {
"AccessToken": "eyJra........",
"ExpiresIn": 3600,
"IdToken": "eyJra........",
"RefreshToken": "eyJjd........",
"TokenType": "Bearer"
},
"ChallengeParameters": {}
}
如果你收到像这样的挑战:
{
"ChallengeName": "NEW_PASSWORD_REQUIRED",
"ChallengeParameters": {
"USER_ID_FOR_SRP": "1231-......",
"requiredAttributes": "[]",
"userAttributes": "{\"email_verified\":\"true\",\"email\":\"youremail@example.com\"}"
},
"Session": "Sfas......"
}
你需要设置新密码。将其添加到Body
中作为raw
值
{
"ChallengeName": "NEW_PASSWORD_REQUIRED",
"ChallengeResponses": {
"USERNAME": "youremail@example.com",
"NEW_PASSWORD": "newpassword"
},
"ClientId": "2s........................",
"Session": "Sfas......(use one from the InitiateAuth response)"
}
设置headers
X-Amz-Target: AWSCognitoIdentityProviderService.RespondToAuthChallenge
Content-Type: application/x-amz-json-1.1
向https://cognito-idp.us-east-1.amazonaws.com/
发送请求,您可能需要更改区域。
再次执行步骤1以接收令牌。
https://stackoverflow.com/questions/37941780
复制相似问题