lambda 无服务器上的身份验证和用户创建
Authentication and user creation on lambda serverless
我创建了一个 Lambda REST api(使用无服务器)来访问 Dynamodb 数据库并执行 CRUD 操作。
然后我附加了一个 CognitoUserPool 和一个 CognitoUserClient 以及 ApiGatewayAuthorizer
那么我现在面临的问题是,为了识别我正在使用这样的一些终端命令:
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",
"ClientId":"myclientid",
"AuthFlow":"ADMIN_NO_SRP_AUTH",
"AuthParameters":{
"USERNAME":"username",
"PASSWORD":"password"
}
}
这在终端上给了我一个令牌,然后我(手动)将其复制到 Postman
我在哪里测试 API。
我怎样才能使这一切自动进行并以编程方式编写脚本?
我也希望用户注册然后进行身份验证。
我查看了一些无服务器示例(在 Python 中),但他们使用的是 Auth0,我想继续使用 AWS 资源。
有什么想法吗?或者我可以适应我的需要的代码?
要以编程方式实现相同的行为,
您首先需要决定要使用哪个SDK。
对于 python 用户,您应该使用 boto3,这是 python 的 AWS SDK。
更具体地说,要实现完整的注册过程,您可以使用等效的 boto3 sign_up, confirm_sign_up, admin_initaiate_auth。
如您所见,这些函数在名称上非常相似,在 request/response 语法中也是如此。
关于完整代码,这没有经过测试,但它基于 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 种类型的标记,要更好地理解,请参阅 here。
我创建了一个 Lambda REST api(使用无服务器)来访问 Dynamodb 数据库并执行 CRUD 操作。
然后我附加了一个 CognitoUserPool 和一个 CognitoUserClient 以及 ApiGatewayAuthorizer
那么我现在面临的问题是,为了识别我正在使用这样的一些终端命令:
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",
"ClientId":"myclientid",
"AuthFlow":"ADMIN_NO_SRP_AUTH",
"AuthParameters":{
"USERNAME":"username",
"PASSWORD":"password"
}
}
这在终端上给了我一个令牌,然后我(手动)将其复制到 Postman
我在哪里测试 API。
我怎样才能使这一切自动进行并以编程方式编写脚本? 我也希望用户注册然后进行身份验证。
我查看了一些无服务器示例(在 Python 中),但他们使用的是 Auth0,我想继续使用 AWS 资源。
有什么想法吗?或者我可以适应我的需要的代码?
要以编程方式实现相同的行为, 您首先需要决定要使用哪个SDK。
对于 python 用户,您应该使用 boto3,这是 python 的 AWS SDK。
更具体地说,要实现完整的注册过程,您可以使用等效的 boto3 sign_up, confirm_sign_up, admin_initaiate_auth。
如您所见,这些函数在名称上非常相似,在 request/response 语法中也是如此。
关于完整代码,这没有经过测试,但它基于 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 种类型的标记,要更好地理解,请参阅 here。