2017-10-23 13 views
2

こんにちは誰も私のカスタム(ユーザー名/パスワード)とGoogleログインのAWSコグニートを統合する手順を教えてもらえますか?私は問題なく動作するカスタムログインを得ることができます。私は、問題なしでユーザープールを構成することができました。私はちょうどクライアント側の変更について迷っています。AWS CognitoをGoogleとカスタムログインの両方に統合する手順

私はamazon-cognito-identity-jsとaws-sdkパッケージを使用しています。

私が使用するコードスニペットは以下のとおりです。ここで私は認証を決定するためのパラメータを使用しています。 あなたのいずれかがフィードバックを提供できるなら、それは素晴らしいことでしょう。ありがとうございました。

export function getAwsCredentials(userToken, type) { 
 
    let authenticator = ''; 
 
    
 

 
    if (type == 'CUSTOM') { 
 
    authenticator = `cognito-idp.${config.cognito 
 
     .REGION}.amazonaws.com/${config.cognito.USER_POOL_ID}`; 
 
    } 
 
    else if (type == 'GOOGLE') { 
 
    authenticator = 'accounts.google.com'; 
 
    } 
 

 
    AWS.config.update({ region: config.cognito.REGION }); 
 

 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
 
    IdentityPoolId: config.cognito.IDENTITY_POOL_ID, 
 
    Logins: { 
 
     [authenticator]: userToken 
 

 
    } 
 
    }); 
 

 
    return AWS.config.credentials.getPromise(); 
 
}

+0

このコードは私にはうまく見えます。あなたはGoogleから 'userToken'を入手する方法を知りたいですか?それとも、Cognitoが好きではないGoogleトークンを手に入れていますか?あなたのユーザプールに加えて、すでに設定されている連合アイデンティティプールがあると想定するのは安全ですか? –

+0

はいフェデレーションIDプールを設定しました。だからトークンが来たら、単にログインとして追加できますか?どのようにユーザーが(Googleまたはカスタムから)どのようにログインしているかを決める方法 –

答えて

1

それは、フェデレーテッド・アイデンティティ・プールに出たとき、あなたは確かに似すべてのトークンを扱うことができます。ログインのマップの[authenticator]を変更するだけです。

おそらく、あなたのgetAwsCredentials関数を呼び出すコードは、トークンの出所を知っていて、上でやっているようにパラメータに渡すことができます。

私はこれが必ずしもひどいアプローチではないと言いたいと思います。私はtypeの代わりに[authenticator]の値を直接渡すかもしれませんが、それは比較的小さなものです。私の主なポイントは、は、であり、呼び出された関数ではなく、呼び出し元コードのどこからトークンが得られたのかを知る責任があります。使用したアイデンティティプロバイダを決定

トークン

たいまたはトークン自体のうち、アイデンティティプロバイダをプルする必要がある場合があります同様に有効なアプローチは、もちろん、あります。

integrate with Google directlyとすると、Googleからトークンを受け取り、これをCognitoに渡します(上記のコードのように)。トークンをデコードすると、どこかに

"iss": "accounts.google.com", 

が見つかります。

"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx", 

あなたが言うことができますこの方法:あなたが直接ユーザーのプール、あなたは(あなたが後で身元プールに提供)ユーザー・プールから入手トークンと統合するとき同様に

は、のようなものが含まれていますユーザがトークンを調べることによってどのようにログインしたか。 Cognito上

注意は、GoogleにログインするCognitoのホストされたUIを使用する場合は、あなたがaccess_tokenと(リダイレクト経由)Cognitoからバックid_tokenを取得するUI

主催しました。このシナリオでは、すべてトークンが同じの場所(Cognito)から来ています。つまり、実際のアイデンティティプロバイダが誰であるかを知るために呼び出しコードに頼ることはできません。

この場合、アプリケーションがIDPの誰かを気にする場合は、トークンを開かなくてはなりません。id_tokenのこの部分は、おそらくあなたの後です:

"identities": [ 
    { 
     "userId": "100000000000000000000", 
     "providerName": "Google", 
     "providerType": "Google", 
     "issuer": null, 
     "primary": "true", 
     "dateCreated": "1507749926267" 
    } 
    ], 
    "token_use": "id", 
    "auth_time": 1509303233, 
    "name": "Your User", 
    "exp": 1509306833, 
    "iat": 1509303233, 
    "email": "[email protected]" 
+0

マイクありがとう!私はあなたの点を確認します。私はCognitoのホストされたUIを使用していません –

関連する問題