0

AWS iOS SDK v2.4.7과 함께 Swift를 사용하여 iOS 9 앱에서 인증 및 사용자 데이터를 관리하기 위해 AWS Cognito를 통합하는 과정에 있습니다. 그러나이를 수행하는 방법에 대한 명확한 예를 찾을 수 없습니다. Google 로그인 기능이 작동합니다 (즉, Google에서 ID 토큰을 성공적으로 가져올 수 있음). 그러나 이것을 AWS에서 인증하는 데 사용할 수있는 방법이 확실하지 않습니다. 올바른 사용 권한을 가진 ID 풀과 사용자 역할을 만들었습니다. 내 문제는 AWS의 인증을 위해이 토큰을 Cognito에 전달하는 것 같다.AWS SDK v2.4.7을 사용하여 외부 제공 업체 (예 : Google)를 통해 최종 사용자를 인증하는 방법은 무엇입니까?

AWS 안내서에 제공된 code snippet은 여전히 ​​2.4.0 SDK 이전 버전에서 사용되지 않는 메소드를 사용합니다. 나는 새로운 모범 사례의 예를 찾지 못했습니다. 문제가 좀 더 혼란스럽게 만들기 위해 AWS의 Authentication Flow overview은 v2.4.0 릴리스 이전의 this 게시물에 설명되어 있기 때문에 여전히 v2.4.0 이전 버전 인 것으로 보입니다. 그러나 첫 번째 코드 스 니펫에서 설명한 것과 다른 프로세스를 사용하는 것 같습니다. . (Google+ 로그인에서 새로운 Google 로그인 시스템으로 이전하면서 가이드가 게시 된 이후 Google의 프로세스가 약간 변경된 것으로 보입니다.)

요약하면, 내 로그인에 허용되는 방법은 무엇입니까? 최신 AWS iOS SDK (v2.4.7)를 사용하여 Google을 통해 최종 사용자를 인증하고 Cognito (차후 AWS API 호출 용)를 통해 인증합니까?

여기 현재 나의 시도입니다. 구글 로그인 절차가 완료되면

// AWS setup 
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId:"us-east-1:<REDACTED>") 
let serviceConfig = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = serviceConfig 

그런 다음, 나는 Cognito 인증하기 위해 ID 토큰을 사용하려고 : 가이드에 설명 된대로 첫째, 내 응용 프로그램 위임에, 나는 AWS 서비스를 초기화합니다. 다음 스 니펫의 user은 성공적인 Google 로그인에 의해 반환 된 GIDGoogleUser입니다. Google 로그인이 작동하고 유효한 ID 토큰을 가지고 있는지 확인했습니다.

let getIdInput = AWSCognitoIdentityGetIdInput() 
getIdInput.logins = [ "accounts.google.com" : user.authentication.idToken ] 
getIdInput.identityPoolId = "us-east-1:<REDACTED>" 
getIdInput.accountId = "<REDACTED>" 
AWSCognitoIdentity.defaultCognitoIdentity().getId(getIdInput).continueWithBlock{ (task: AWSTask?) -> AnyObject? in 
    if task?.error == nil { 
     let result = task?.result as! AWSCognitoIdentityGetIdResponse 
     let input = AWSCognitoIdentityGetCredentialsForIdentityInput() 
     input.identityId = result.identityId 
     AWSCognitoIdentity.defaultCognitoIdentity().getCredentialsForIdentity(input) 
    } else { 
    } 
    return nil 
} 

로그는,이 (내가이 풀에 대한 인증되지 않은 액세스를 허용하지 않는 것이 사실이다) 반드시 잘못이 아니라 내가 기대했던 것이 아니다

Unauthenticated access is not supported for this identity pool. 

을주는 구글 토큰 이후 나는 사용자를 인증해야합니다. 이견있는 사람?

답변

0

운좋게도 개발 프로세스에서 백엔드 서비스를 전환 할 수있을만큼 충분히 빨랐습니다. 빠른 연구 끝에 잠시 후 Firebase by Google으로 바꿨습니다. 전에 AWS를 사용하여 6 시간 동안 고심했던 30 분을 구현했습니다. 그것이 AWS Cognito의 모든 사용 사례에 대해 좋은 대안인지 확실하게 말할 수는 없지만 그것이 나를 위해 효과가있는 것처럼 보입니다. 방금 시작한 지 확인하는 가치가 있습니다.

관련 문제