2016-12-28 7 views
3

私はAWS javascript SDKを使用し、FacebookとGoogleで正常にログインできるAngularアプリを持っています。私はCognito IDを作成することができました。私は自分のFederated IdentityプールにIDを表示します。私はIAM認証済みのAPIエンドポイントを使用することもできます(私は呼び出しているLambdaでユーザーのcognitoIdを参照しています)。node.jsで認証されたユーザーのメールアドレスを取得する方法AWS Lambda?

データベース(DynamoDB)のキーとしてユーザーの電子メールアドレスを使用したいので、信頼できるソースであるCognito(優先)か認証プロバイダのどちらかからユーザーの電子メールアドレスにアクセスする方法を理解しようとしています。 JWT。

ユーザーのメールアドレスにアクセスする最も良い方法は何ですか?

更新:クライアント側(javascript)では、GoogleトークンとFacebookトークンでフェデレーションIDを使用しています。社会的なログインが働いている、と私はうまくCognitoで認証を受けることができ、ログインを渡す:

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: 'us-east-1:****', 
    Logins: { 
     'accounts.google.com': authResult['id_token'] 
    } 
}); 

私はその後、AWS.config.credentials.get()を行うと、私はAWS.config.credentials.identityIdのようなものを得ることができますが、私はaccessTokenまたはメソッドにを見つけることができませんJWTを取得するために呼び出します。私はresult.getAccessToken().getJwtToken()に電話する必要があると信じていますが、私はそれを見つけることができません。

accessTokenを取得したすべての例は、.authenticateUser(authenticationDetails())を使用しているようですが、詳細にはユーザー名とパスワード(フェデレーテッド・ログインではない)が含まれています。

答えて

6

tldr; accessTokenポスト認証をラムダに送信し、CognitoIdentityServiceProvider.getUser()を使用して属性を取得します。

私はIDトークンで何時間も迷っていましたが、実際の身元を知る唯一の方法は、成功した認証から得られたaccessTokenとIDプロバイダからのgetUser呼び出しの組み合わせを使用することです。これはNodeJS SDKの場合のみ表示され、それ以外の場合は表示されません。

私はアプリケーションのためにAmazonのAPI Gatewayを使用しており、バックグラウンドではLambdaを使用しています。認証に成功すると、accessTokenにアクセスしてCognitoサーバープロバイダにフィードを送信できます。 そこから詳細をローカルに保存できますが、バックエンドでこの情報を使用する予定がある場合は、大きなセキュリティ上の問題が発生します。ローカルストレージなので、ユーザーはユーザー属性を好きなものに調整できます。

これを回避するには、accessTokenをラムダ関数に直接渡して、サーバーで同じ処理を実行します。これにより、ユーザー属性が操作されたり改ざんされたりしないようになります。 AWS SDKを使用して内部の詳細を取得できる他のユーザーにaccessTokenを漏らさないように、APIでHTTPSを使用してください。

var AWS = require("aws-sdk"); 
 

 
AWS.config.region = '<REGION-ID>'; 
 

 
exports.lambda_handler = function(event, context) { 
 
    var accessToken = event['accessToken']; 
 
    var provider = new AWS.CognitoIdentityServiceProvider(); 
 
    provider.getUser({ 
 
    AccessToken: accessToken 
 
    }, function(err, obj) { 
 
    context.succeed({ 
 
     'user': obj 
 
    }); 
 
    }); 
 
};

+0

対応するための時間を割いていただきありがとうございます。今私が持っている問題は、私がaccessTokenを入手する方法を知らないということです。私は、資格情報を取得するために使用しているサンプルを使って質問を更新します。私が見つけることができるすべての例は、ユーザー名とパスワードの資格情報を使用しているようですが、私はGoogleとFacebookのプロバイダで連携IDを使用しています。 – destro

関連する問題