首页 文章

什么是用于登录Amazon Cognito用户池的REST(或CLI)API

提问于
浏览
10

How do i make logins happen via Amazon Cognito REST APIs (for user pools) on platforms for which there is no official SDK? - 请注意,我要求的是用户池 - 而不是身份池 .


故事梗概


亚马逊cognito提供3种登录:

  • 联合登录(创建 identity pools ) - 使用FB,Twitter,G等社交连接

  • AWS托管登录(创建 user pools ) - 使用亚马逊自己的托管注册,登录,忘记密码,重置密码服务

  • 开发人员提供了登录(我自己管理的自定义身份验证服务)

I am using the second one (with User Pools)


Amazon Cognito有几个用于android,iOS,javascript,Xamarin等的SDK .Cognito还提供REST API,用于在官方SDK支持的平台之外构建 . I am building an app for a different platform 因此,REST API是我唯一的方式,因为我的平台没有官方SDK .

Cognito REST API为“注册', '忘记密码', '确认验证”等提供了各种 endpoints ,但令人惊讶的是, the REST API does not have any endpoint for simple signin / login .


Cognito CLI API docs我有“注册用户所需的所有OFFICIAL CLI API ", "确认注册", "更改密码", "验证电话号码", "忘记密码”等 Surprisingly there is no CLI API mentioned for LOGINs. 我希望应该有一些CLI API,如“ $ aws cognito-idp log-in " just like there is for " $ aws cognito-idp sign-up " or for " $ aws cognito-idp forgot-password ”等 .


同样来自this getting started tutorial,它谈到“应该用令牌收到 AFTER 成功验证用户”应该做什么 . 但是,它没有谈论 HOW TO 使成功的身份验证发生在Cognito User Pool API的第一位 . 示例仅适用于Android,iOS,javascript SDK . 对于没有SDK的平台,没有可用的身份验证示例 .


因此, How do i make logins happen via Amazon Cognito REST APIs (for user pools) on platforms for which there is no official SDK?

5 回答

  • 1

    Update:

    正如您在下面的评论中指出的那样,验证流程在此处记录:http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html . 这可能有助于澄清身份验证流程

    这有点违反直觉,但对于您不希望用户明确登录的移动应用程序,它确实有意义,而是为用户携带令牌 . 请注意,AWS Userpools SDK for iOS中有一个显式的登录(登录)API . 我没有使用它,但我想它只是一个备用客户端API来通过相同的 InitiateAuth() 后跟 RespondToAuthChallenge() 流 . 此处记录了iOS登录示例 - IOS SDK Example: Sign in a User

    Original Post:

    用于启动身份验证的Cognito用户池API文档是available here

    如果你在其中一个SDK中实现一个用户池应用程序,它的工作方式会变得更加清晰(我在Swift for iOS中做了一个,因为JSON响应的记录很详细,你可以看到发生了什么,如果你仔细查看日志) .

    但假设我理解了您的问题:总之,您应该 InitiateAuth() 并且对此的响应(来自Cognito用户池服务器)是一个挑战 . 然后你做 RespondToAuthChallenge() (也在该API文档中记录),并且对此的响应是认证结果 - 假设密码/会话/令牌被接受 .

    我相信,这两件事的组合是你所谓的LOGIN,它就像登录一样 . 在API中,它的设置方式是,当用户未经身份验证时尝试获取用户信息将启动 InitiateAuth() 并且(无论如何在iOS中)API会对您编写的代码进行回调以询问密码,并发送 RespondToAuthChallenge() 请求等

  • 0

    AWS Cognito团队的开发人员之一 .

    要添加到@md-abdul-munim's answer,我们建议使用其中一个客户端SDK . 如果您正在构建REST API,然后是与这些API对话的前端,那么最好只从前端集成Cognito .

    如果您绝对需要从后端使用Cognito,我们的GA版本将提供身份验证API . 在我们的Cognito用户池测试版中,只能通过客户端SDK进行身份验证 .

  • 6

    根据您的讨论,我认为您正在尝试从Web前端进行此操作 . 因为,cognito为您提供必要的后端支持,它希望您从表示层进行通信(例如,身份验证,注册等) - 这就是您为不同的移动平台找到SDK的原因 . 他们还有用于Web应用程序的SDK-可以通过他们的Javascript SDK访问 .

    这是一个详细的教程,用于实现您使用JS SDK从Web前端提出的问题 - Accessing Your User Pools using the Amazon Cognito Identity SDK for JavaScript

  • 0

    我有类似的问题和想知道如何在Elixir后端集成Cognito并找到这个库:https://github.com/aws-beam/aws-elixir

    通过阅读其源代码我可以理解,他们最终发出一个POST请求,其中包含头 "X-Amz-Target": "AWSCognitoIdentityProviderService.#{name_of_api_action}" (这里是:https://github.com/aws-beam/aws-elixir/blob/master/lib/aws/cognito_identity_provider.ex#L564) . 那没有授权 Headers ,它们被添加到其他地方,但我发现它很有趣 . 构造请求URL的函数如下,因此您应该能够了解被调用的 endpoints .

    我必须说我尝试使用日文写的这篇文章 - https://qiita.com/yujikawa/items/e79929ed14277102f4b8,并且无法使其工作,可能是因为我不确定适当的AWS_ENDPOINT环境变量应该是什么 . 我目前正在考虑试用Ruby SDK,从文档的外观来看似乎没问题 . 但是,尽管如此,这些信息仍然可以帮助某些人 .

  • 0

    这个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端设置 .

相关问题