Быстрый обмен токеном AWS на учетные данные - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь получить доступ к службам aws, используя пул удостоверений после входа в систему по этому документу aws https://docs.aws.amazon.com/en_us/cognito/latest/developerguide/amazon-cognito-integrating-user-pools-with-identity-pools.html

, но при интеграции пула пользователей с частью пула удостоверений я не могу добавить токен вбыстрый код

let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil)
let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID")
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool")
let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)

В JavaScript и Android оба имеют учетные данные Provider.logins.

Я получил следующее сообщение:

Message: The security token included in the request is invalid.

или мне нужно вызвать aws sts api этим документом?https://docs.aws.amazon.com/en_us/IAM/latest/UserGuide/id_credentials_temp_request.html

Спасибо за помощь.

1 Ответ

0 голосов
/ 07 марта 2019

сначала я попробую это

let identity = AWSCognitoIdentity.default()
        let input = AWSCognitoIdentityGetCredentialsForIdentityInput()
        input?.identityId = identityid
        input?.logins = ["cognito-idp.us-east-1.amazonaws.com/us-east-1_XXXXX":identityToken]
        identity.getCredentialsForIdentity(input!).continueWith(block: { (task:AWSTask<AWSCognitoIdentityGetCredentialsForIdentityResponse>) -> Any? in

            if (task.error != nil) {
                print("Error: " + task.error!.localizedDescription)
            }
            else {
                self.accessKey = (task.result?.credentials?.accessKeyId)!
                self.secrectKey = (task.result?.credentials?.secretKey)!
                self.sessionToken = (task.result?.credentials?.sessionToken)
            }
            return task;
        })

но это не работает, я не уверен, что произойдет.я использую https, чтобы получить aws iot shadow, он вернет нулевое значение и получит сообщение 403.затем я изменяю официальный код документа, например,

let serviceConfiguration = AWSServiceConfiguration(region: .USEast1,credentialsProvider: nil)
let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID")
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool")
let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)

, затем использую этот код

    credentialsProvider.credentials().continueWith(block: { (task) -> AnyObject? in
        if (task.error != nil) {
            print("Error: " + task.error!.localizedDescription)
        }
        else {
            let credentials = task.result!
            self.accessKey = credentials.accessKey
            self.secrectKey = credentials.secretKey
            self.session  = credentials.sessionKey!           }
        return task;
    })

, но этот код не использует idtoken, полученный при входе в Cognito, может быть, это просто позволяет мне получить доступслужбы, то я могу разобрать idtoken, чтобы получить подробное сообщение idtoken.

надеюсь, это кому-нибудь поможет.

в дополнение к этому, импорт заключается в том, чтобы прикрепить временные учетные данные iPrincipalPolicy к вам с помощью iot; при входе в систему cognito вы получите идентификационные данные удостоверения личности, а затем использовали этот идентификатор удостоверения личности для подключения.

или вы получите 403 запрещенных, а нулевые возвращаемые значения.

БЮР https://github.com/awslabs/aws-sdk-ios-samples/blob/master/IoT-Sample/Swift/IoTSampleSwift/ConnectionViewController.swift

...