2016-04-04 7 views
3

私はバックエンドサービスを作成しており、AWS Cognitoを使用しています。 今、私は自分のDeveloper Authenticated Identitiesを使用しています。 私のユーザは自分のシステムを使ってログインできます。この部分は完了です。コグニートを使用してユーザーの身元を確認します

ただし、ログイン後にユーザーを認証する際に問題が発生しています。ユーザーが自分のAPIの一部のプライベート関数にアクセスするリクエストを送信したとします。このユーザーを識別して認証するにはどうすればよいですか?

ログインプロバイダとしてFacebookを使用している場合、httpヘッダーはCognito IDとFacebookのアクセストークンで満たすことができます。次に、GetOpenIdTokenRequest関数を使ってCognitoトークンを取得しようとすると、彼を認証できます。

私は

providerTokens.put("graph.facebook.com", "xxxxxxxxxxxx"); 
tokenRequest.setLogins(providerTokens); 

AmazonCognitoIdentityClient identityClient = new AmazonCognitoIdentityClient(); 
     identityClient.setRegion(RegionUtils.getRegion(Configuration.REGION)); 
     GetOpenIdTokenResult tokenResp = identityClient.getOpenIdToken(tokenRequest); 

のようなものを持っていますしかし、私はFacebookのを使用していませんよ。

だから、私は、開発者の認証は、公開プロバイダではないエラーを取得するこの

providerTokens.put("customdeveloper.authentication.com", "xxxxxxxxxxxx"); 
tokenRequest.setLogins(providerTokens); 

のようないくつかのものを試してみました。

正しい方向に進むとかなり混乱します。私は基本的に私のユーザーを認証したい。トークンを受け取ったoauth2に似た何かが、ユーザーの身元を確認できます。

Cognitoを使用して正しい方法は?

答えて

1

Cognitoのドキュメントはサーバー側でかなり曖昧ですが、私はそれを行う方法を理解しています。

基本的に、アイデンティティIDとCognitoトークンをサーバーに渡す必要があります。あなたは右のCognitoトークンを持っている場合は、あなたが身元を取得し、認証することができるはず

// Create the request object    
     Map providerTokens = new HashMap(); 
     providerTokens.put("cognito-identity.amazonaws.com", "auidhashaisdhals"); 
     tokenRequest.setLogins(providerTokens); 

     AmazonCognitoIdentityClient identityClient = new AmazonCognitoIdentityClient(); 
     identityClient.setRegion(RegionUtils.getRegion(Configuration.REGION)); 
     GetCredentialsForIdentityRequest request = new GetCredentialsForIdentityRequest(); 
     request.withLogins(providerTokens); 
     request.setIdentityId("us-east-1:XXXXX-9ac6-YYYY-ac07-ZZZZZZZZZZZZ"); 
     GetCredentialsForIdentityResult tokenResp = identityClient.getCredentialsForIdentity(request); 

:その後、サーバー上で、あなたはこのような何かを行います。トークンが無効な場合は、ユーザーを認証しません。

トークンが無効な場合、404エラーをキャッチして返すことができるので、Amazonは例外をスローします。

2

はい、アイデンティティIDとCognitoトークンを使用して、getCredentialsForIdentityを呼び出して、トークンが有効でそのアイデンティティに属していると判断できます。

これらの資格情報を使用して、そのユーザーと異なるサービスを呼び出すことができます。

別のオプションは、APIゲートウェイの背後にあるバックエンドサーバロジックを置くことです: http://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html

その後、ユーザーが資格情報をクライアント側を取得し、その前線サーバー側のロジックAPIゲートウェイにそれらの資格情報を使用して電話をかけることでしょう。

関連する問題