Python lambda serverless上的身份验证和用户创建

Python lambda serverless上的身份验证和用户创建,python,amazon-web-services,amazon-cognito,serverless,Python,Amazon Web Services,Amazon Cognito,Serverless,我创建了一个Lambda REST api(使用serverless)来访问Dynamodb数据库并执行CRUD操作 然后,我附加了一个CognitoUserPool和一个带有和ApiGatewayAuthorizer的CognitoUserClient 我现在面临的问题是,为了识别,我使用了一些终端命令,如下所示: aws cognito-idp sign-up \ --region myregion \ --client-id clientid \ --username user

我创建了一个Lambda REST api(使用serverless)来访问Dynamodb数据库并执行CRUD操作

然后,我附加了一个CognitoUserPool和一个带有和ApiGatewayAuthorizer的CognitoUserClient

我现在面临的问题是,为了识别,我使用了一些终端命令,如下所示:

aws cognito-idp sign-up \
  --region myregion \
  --client-id clientid \
  --username username \
  --password mypassword
然后我跑:

aws cognito-idp admin-confirm-sign-up \
  --region myregion \
  --user-pool-id userpooolid \
  --username username
最后我跑去拿代币

aws cognito-idp admin-initiate-auth --cli-input-json file://auth.json
其中json包含:

{
“UserPoolId”:“myregion”,
“客户端ID”:“myclientid”,
“AuthFlow”:“ADMIN\u NO\u SRP\u AUTH”,
“AuthParameters”:{
“用户名”:“用户名”,
“密码”:“密码”
}
}
这在终端上为我提供了一个令牌,然后我(手动)将其复制到邮递员中

我在这里测试API

我怎样才能使所有这些都自动并以编程方式编写脚本? 此外,我希望用户注册,然后进行身份验证

我看了一些无服务器的示例(在Python中),但它们使用的是Auth0,我想继续使用AWS资源


有什么想法吗?或者我可以根据需要修改的代码?

以编程方式实现相同的行为, 您首先需要决定要使用哪个SDK

对于python用户,应该使用AWS SDK For python

更具体地说,要实现完整的注册过程,您可以使用boto3等效程序

正如您所看到的,这些函数在名称和请求/响应语法上都非常相似

关于完整的代码,这没有经过测试,但它基于AWS示例代码

import boto3
from botocore.exceptions import ClientError


def sign_up(app_client_id, username, password):
    client = boto3.client('cognito-idp')

    try:
        sign_up_response = client.sign_up(
                ClientId=app_client_id,
                Username=username,
                Password=password
        )
        print(sign_up_response)

        confirm_sign_up_response = client.admin_confirm_sign_up(
                UserPoolId=deadpool['user_pool_id'],
                Username=deadpool['username']
        )
        print(confirm_sign_up_response)

     except ClientError as e:
         print(e)


def init_auth(app_client_id, username, password):
    client = boto3.client('cognito-idp')

    response = client.initiate_auth(
            AuthFlow='USER_PASSWORD_AUTH',
            AuthParameters={
                'USERNAME': username,
                'PASSWORD': password
            },
            ClientId=app_client_id
    )

    print(response['AuthenticationResult']['AccessToken'])
    print(response['AuthenticationResult']['IdToken'])
    print(response['AuthenticationResult']['RefreshToken'])

如您所见,有3种类型的令牌,要更好地理解,请参考。

要通过编程实现相同的行为, 您首先需要决定要使用哪个SDK

对于python用户,应该使用AWS SDK For python

更具体地说,要实现完整的注册过程,您可以使用boto3等效程序

正如您所看到的,这些函数在名称和请求/响应语法上都非常相似

关于完整的代码,这没有经过测试,但它基于AWS示例代码

import boto3
from botocore.exceptions import ClientError


def sign_up(app_client_id, username, password):
    client = boto3.client('cognito-idp')

    try:
        sign_up_response = client.sign_up(
                ClientId=app_client_id,
                Username=username,
                Password=password
        )
        print(sign_up_response)

        confirm_sign_up_response = client.admin_confirm_sign_up(
                UserPoolId=deadpool['user_pool_id'],
                Username=deadpool['username']
        )
        print(confirm_sign_up_response)

     except ClientError as e:
         print(e)


def init_auth(app_client_id, username, password):
    client = boto3.client('cognito-idp')

    response = client.initiate_auth(
            AuthFlow='USER_PASSWORD_AUTH',
            AuthParameters={
                'USERNAME': username,
                'PASSWORD': password
            },
            ClientId=app_client_id
    )

    print(response['AuthenticationResult']['AccessToken'])
    print(response['AuthenticationResult']['IdToken'])
    print(response['AuthenticationResult']['RefreshToken'])
如您所见,有3种类型的令牌,要更好地理解,请参阅