AWS 用户池 - 在没有会话标识符的情况下调用 defAuthChallenge

AWS User Pools - defAuthChallenge called without session identifier

我已将 lambda 函数添​​加到我的 AWS 用户池Define Auth Challenge

当我的 iOS 应用程序尝试让用户登录时,会调用 Define Auth Challenge lambda。但是 event.request.session 参数是一个空列表 [].

only one example(这是 JavaScript lambda 的一部分的屏幕截图),但需要定义 session

我需要在 iOS 应用程序中定义什么才能正确填充 session

event = {
    u'userName': u'SET', 
    u'userPoolId': u'SET',
    u'callerContext': {
        u'awsSdkVersion': u'aws-sdk-ios-2.6.10', 
        u'clientId': u'SET'
    }, 
    u'region': u'SET', 
    u'request': {
        u'session': [], 
        u'userAttributes': {
            u'email_verified': u'true', 
            u'email': u'SET', 
            u'sub': u'SET', 
            u'cognito:user_status': u'CONFIRMED', 
            u'cognito:email_alias': u'SET'
        }
    }, 
    u'triggerSource': u'DefineAuthChallenge_Authentication', 
    u'version': u'1', 
    u'response': {
        u'issueTokens': None, 
        u'failAuthentication': None, 
        u'challengeName': None
    }
}

event.request中的session不是客户设置的

对于 Define Auth Challenge Lambda 函数的第一次调用,session 是一个空列表。后续调用将填充 session

使用 Python,单步自定义流程 Define Auth Challenge 可以采用以下形式:

def handler(event, context):

    step = len(event['request']['session'])

    if step == 0:
        event['response']['challengeName'] = 'CUSTOM_CHALLENGE'
        event['response']['issueTokens'] = False
        event['response']['failAuthentication'] = False
    elif step == 1 and event['request']['session'][0]['challengeName'] == 'CUSTOM_CHALLENGE':
        event['response']['issueTokens'] = event['request']['session'][0]['challengeResult']
        event['response']['failAuthentication'] = False
    else:
        event['response']['issueTokens'] = False
        event['response']['failAuthentication'] = True

    return event