質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

4035閲覧

[iOS] AWS Cognito UserPoolのap-northeast-1リージョンを使った場合、Credentialの取得に失敗する

tktk8924

総合スコア14

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

1グッド

2クリップ

投稿2016/08/23 23:27

AWS Cognitoのap-northeast-1リージョンで以下を作成しておく。

  • UserPool
  • IdentityPool

IdentityPoolには外部プロバイダーとしてUserPoolを設定する。

問題は以下のコード。

var configuration = AWSServiceConfiguration(region: .APNortheast1, credentialsProvider: nil) let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration( clientId: Constants.COGNITO_IDENTITY_USER_POOL_APP_CLIENT_ID, clientSecret: Constants.COGNITO_IDENTITY_USER_POOL_APP_CLIENT_SECRET, poolId: Constants.COGNITO_IDENTITY_USER_POOL_ID) AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration( configuration, userPoolConfiguration: userPoolConfiguration, forKey: Constants.COGNITO_IDENTITY_USER_POOL_KEY) userPool = AWSCognitoIdentityUserPool(forKey: Constants.COGNITO_IDENTITY_USER_POOL_KEY) userPool.delegate = self credentialsProvider = AWSCognitoCredentialsProvider( regionType: .APNortheast1, identityPoolId: Constants.COGNITO_IDENTITY_POOL_ID, identityProviderManager: userPool) configuration = AWSServiceConfiguration(region: .APNortheast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration

credentialProviderを初期化したら、例えば以下の様にLambdaを実行してみる。
UserPoolでのログインは実施済みとする。

let lambda = AWSLambdaInvoker.defaultLambdaInvoker() let request = AWSLambdaInvokerInvocationRequest() request.functionName = "FUNCTION_NAME" lambda.invoke(request).continueWithBlock { (task: AWSTask!) -> AnyObject? in print(task.result) return nil }

すると、以下の様なエラーになる。

Invalid login token. Issuer doesn't match providerName

原因は、Credentialを取得するAPIを実行するときのRequestBodyにあると思われる。

// cognito-idp.ap-northeast-1.amazonaws.comになってほしい {"Logins":{"cognito-idp.us-east-1.amazonaws.com\/ap-northeast-1_XXXXXXXXX":"TOKEN"},"IdentityPoolId":"ap-northeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}

Loginsのところで、なぜかproviderNameのPrefixにus-east-1が指定されてしまっている。

同じような事象が起きている方いますでしょうか?
解決策があれば教えて下さい。

ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

AWS SDKのバージョンの問題でした。バージョン2.4.5まではUS-EAST-1リージョンがハードコードされていたようで、現在の最新である2.4.7を使えば解決できます。

GithubでIssueを上げたところ、上記の回答をいただきました。
https://github.com/aws/aws-sdk-ios/issues/447

投稿2016/08/27 11:41

tktk8924

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問