2017-09-28 2 views
0

AWS Cognito est intégré à mon application Swift et aux connexions. Toutefois, lorsque j'essaie d'utiliser l'API AWSCognitoIdentityProvider, le task.result retourné est nul. Pourquoi? Voici le code:Pourquoi AWSCognitoIdentityProvider.getAdminUser et AWSCognitoIdentityProvider.listUsers retournent task.result qui est nul?

let pool = AWSCognitoIdentityUserPool.default() 
let poolId = pool.userPoolConfiguration.poolId 

let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId:poolId) 
let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider) 
AWSServiceManager.default().defaultServiceConfiguration = configuration 

let aguReq = AWSCognitoIdentityProviderAdminGetUserRequest() 
aguReq?.userPoolId = poolId 
aguReq?.username = "USERNAME_GOES_HERE" 

let luReq = AWSCognitoIdentityProviderListUsersRequest() 
luReq?.userPoolId = poolId 

let acpDefault = AWSCognitoIdentityProvider.default() 
acpDefault.adminGetUser(aguReq!).continueWith(block: { (task: AWSTask<AWSCognitoIdentityProviderAdminGetUserResponse>) -> Any? in 
    task.result?.userAttributes?.forEach({ (attr: AWSCognitoIdentityProviderAttributeType) in 
    let attrName = attr.name 
    let attrValue = attr.value 
    print("attrName=\(String(describing: attrName)); attrValue=\(String(describing: attrValue))") 
    }) 
    return nil 
}) 

acpDefault.listUsers(luReq!).continueWith(block: { (task: AWSTask<AWSCognitoIdentityProviderListUsersResponse>) -> Any? in 
    task.result?.users?.forEach({ (u: AWSCognitoIdentityProviderUserType) in 
    print("username=\(String(describing: u.username))") 
    }) 
    return nil 
}) 

Info.plist références toutes les propriétés clés pour Cognito. Est-il possible que listUsers et adminGetUser soient réservés d'une manière ou d'une autre?

De même, pour le talon USERNAME_GOES_HERE, je place toujours un Cognito username, mais pas un identifiant Cognito ou un sous-UUID. Est-ce que ça marche? (Il semble étrange que le username est nécessaire, car je pensais à Cognito que username est pas nécessairement unique entre les utilisateurs Cognito.

Merci.

Répondre

1

AdminGetUser et ListUsers sont des API qui devraient être accessibles à partir de vous backend et les appels doivent présenter des informations d'identification IAM valides.

Vous ne devriez pas appeler ces API de votre application iOS. utiliser au lieu iOS Mobile SDK méthodes qui sera permet aux utilisateurs de se connecter et appeler les API Pools utilisateur Cognito appropriés.

Comme Pour expliquer pourquoi vos appels échouent, il semble que vous essayez de fournir les informations d'identification IAM requises à l'aide des informations d'identification temporaires du service Federated Identity. Vous instanciez le fournisseur d'informations d'identification avec le pool d'identité mais en transmettant l'ID du pool d'utilisateurs au lieu de l'ID du pool d'identité. Reportez-vous à this answer pour plus d'explications.

+0

Si ce sont des API backend, comment un client frontal peut-il obtenir l'UUID "sub"? –