#swift #amazon-web-services #swift3 #amazon-cognito
#swift #amazon-веб-сервисы #swift3 #amazon-cognito
Вопрос:
Я почти завершил процесс авторизации разработчика с помощью AWS. Кажется, я не могу аутентифицировать внутренний токен, который я получаю, и, похоже, не могу найти какие-либо текущие реализации, которые выполняют аутентификацию разработчика через сторонний серверный сервер. Ошибка, которую я получаю, указана ниже.
На данный момент мой код выглядит следующим образом:
Класс, содержащий пользовательский поставщик удостоверений:
import Foundation
import AWSCognitoIdentityProvider
class CustomIdentityProvider: NSObject, AWSIdentityProviderManager {
var tokens: [NSString: NSString]?
init(tokens: [NSString: NSString]) {
self.tokens = tokens
}
@objc func logins() -> AWSTask<NSDictionary> {
return AWSTask(result: tokens! as NSDictionary)
}
}
AWS-APIManager.swift {фрагмент}
/* obtained cognito token from my back-end via getOpenIdTokenForDeveloperIdentity*/
/* From here I my app receives an IdentityId and Token */
let client_cognito_id = String(describing: valid_response)
let session_token = json.dictionaryValue["Token"]!
let login_with_amazon = NSString(string: "cognito-identity.amazonaws.com")
let token = NSString(string: String(describing: session_token))
let customProviderManager = CustomIdentityProvider(tokens: [login_with_amazon: token])
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: self.AWS_REGION,
identityPoolId: "us-east-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
identityProviderManager: customProviderManager
)
credentialsProvider.setIdentityProviderManagerOnce(customProviderManager)
credentialsProvider.getIdentityId().continue ({ (task: AWSTask!) -> AnyObject! in
if (task.error != nil) {
print("Error!!!: " (task.error?.localizedDescription)!)
} else {
// the task result will contain the identity id
let cognitoId = task.result
print(cognitoId)
print("SUCCESS!!!")
}
return nil
})
}
По какой-то странной причине я не могу аутентифицировать полученный токен. Я получаю сообщение об ошибке «Недопустимый токен входа. Не удается передать токен Cognito «.. Я пытался следовать документации и собирать рабочий код, который я нашел буквально в сотнях источников, и, похоже, не могу пройти мимо этой части процесса аутентификации. Буду признателен за любую помощь. Спасибо!
Ответ №1:
Я полагаю, что проблема здесь в том, что, хотя вы предоставляете токен, вы не устанавливаете идентификационный идентификатор, который вы получаете от своего серверной части. Таким образом, он вызывает getId с помощью Cognito OpenIdConnectToken, который не поддерживается.
Простейшая клиентская реализация удостоверений, прошедших проверку подлинности разработчика, заключается в расширении AWSCognitoCredentialsProviderHelper
Приносим извинения за предоставление этого в Objective C вместо Swift. В вашей реализации просто переопределите метод token.
- (AWSTask<NSString *> *)token {
//get the identity id and token from your server
//You can use AWSTaskCompletionSource if you don't have it and need to get it asynchronously.
//Once you have this information, simply set the identity id and return the token
self.identityId = identityId;
return [AWSTask taskWithResult:token];
}