要在AWS Cognito中实现自定义的重新发送代码挑战,您可以按照以下步骤操作:
import boto3
client = boto3.client('cognito-idp')
response = client.create_user_pool(
PoolName='custom-pool',
AutoVerifiedAttributes=['email'],
Policies={
'PasswordPolicy': {
'MinimumLength': 8,
'RequireLowercase': True,
'RequireUppercase': True,
'RequireNumbers': True,
'RequireSymbols': True,
'TemporaryPasswordValidityDays': 7
}
},
EmailVerificationSubject='Verify your email for our app',
EmailVerificationMessage='Please click the link below to verify your email address: {####}',
SmsVerificationMessage='Your verification code for our app is {####}.',
SmsAuthenticationMessage='Your authentication code for our app is {####}.',
UserPoolTags={
'Key': 'Value'
},
AdminCreateUserConfig={
'AllowAdminCreateUserOnly': False,
'UnusedAccountValidityDays': 30,
'InviteMessageTemplate': {
'SMSMessage': 'Your username is {username} and temporary password is {####}.',
'EmailMessage': 'Your username is {username} and temporary password is {####}.',
'EmailSubject': 'Your temporary password'
},
'UnusedAccountValidityDays': 30,
'UnusedAccountValidityDays': 30
}
)
user_pool_id = response['UserPool']['Id']
import json
def trigger_custom_challenge(event, context):
response = {
'challengeName': 'CUSTOM_CHALLENGE',
'issueTokens': False,
'failAuthentication': False
}
if event['request']['session']['challengeName'] == 'CUSTOM_CHALLENGE' and event['request']['session']['challengeResult'] == 'FAIL':
response['failAuthentication'] = True
return response
response = client.create_user_pool_client(
UserPoolId=user_pool_id,
ClientName='custom-client',
GenerateSecret=False,
RefreshTokenValidity=30,
ReadAttributes=['email'],
WriteAttributes=['email'],
ExplicitAuthFlows=['ADMIN_NO_SRP_AUTH'],
SupportedIdentityProviders=['COGNITO'],
CallbackURLs=['https://example.com'],
LogoutURLs=['https://example.com'],
PreventUserExistenceErrors='ENABLED',
AllowedOAuthFlows=['implicit'],
AllowedOAuthScopes=['openid'],
AllowedOAuthFlowsUserPoolClient=True,
AnalyticsConfiguration={
'ApplicationId': 'your-application-id',
'RoleArn': 'your-role-arn',
'ExternalId': 'your-external-id',
'UserDataShared': True
},
PreventUserExistenceErrors='ENABLED',
SupportedIdentityProviders=['COGNITO'],
CallbackURLs=['https://example.com'],
LogoutURLs=['https://example.com'],
AllowedOAuthFlows=['implicit'],
AllowedOAuthScopes=['openid'],
AllowedOAuthFlowsUserPoolClient=True
)
user_pool_client_id = response['UserPoolClient']['ClientId']
response = client.create_user_pool_domain(
Domain='custom-domain',
UserPoolId=user_pool_id
)
response = client.update_user_pool(
UserPoolId=user_pool_id,
LambdaConfig={
'CustomMessage': 'arn:aws:lambda:us-west-2:123456789012:function:custom-message',
'PreSignUp': 'arn:aws:lambda:us-west-2:123456789012:function:pre-signup',
'PostConfirmation': 'arn:aws:lambda:us-west-2:123456789012:function:post-confirmation',
'PreAuthentication': 'arn:aws:lambda:us-west-2:123456789012:function:pre-authentication',
'PostAuthentication': 'arn:aws:lambda:us-west-2:123456789012:function:post-authentication',
'DefineAuthChallenge': 'arn:aws:lambda:us-west-2:123456789012:function:define-auth-challenge',
'CreateAuthChallenge': 'arn:aws:lambda:us-west-2:123456789012:function:create-auth-challenge',
'VerifyAuthChallengeResponse': 'arn:aws:lambda:us-west-