2016-04-25 60 views
4

Cognito User Poolを作成しました。ユーザーをリストし、Java AWS SDKのAWSognitoIdentityProviderClientを使用してユーザーを追加できます。AWS Cognito User Poolに対して認証する方法

しかし、カスタムログインページがあり、入力したユーザー名とパスワードを受け取り、自分のユーザープールに対して認証したいと考えています。 Java AWS SDKのどこにでも私は資格情報を渡して認証結果を得ることができません。

編集:

NotAuthorizedException:私はこのエラーを乗り越えることができない設定に欠け資格情報

関連するコード:

AWS.config.region = 'us-east-1'; 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
     IdentityPoolId: 'us-east-1:087a3210-64f8-4dae-9e3c...' // your identity pool id here 
    }); 

    AWSCognito.config.region = 'us-east-1'; 
    AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({ 
     IdentityPoolId: 'us-east-1:087a3210-64f8-4dae-9e3c...' // your identity pool id here 
    }); 

    var poolData = { 
     UserPoolId: 'us-east-1_39RP...', 
     ClientId: 'ttsj9j5...', 
     ClientSecret: 'bkvkj9r8kl2ujrlu41c7krsb6r7nub2kb260gj3mgi...' 
    }; 
    var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData); 

    var authenticationData = { 
     Username: '[email protected]', 
     Password: 'foobarfoo', 
    }; 
    var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData); 
    var userData = { 
     Username: '[email protected]', 
     Pool: userPool 
    }; 
    var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData); 
    cognitoUser.authenticateUser(authenticationDetails, { 
     onSuccess: function (result) { 
      console.log('access token + ' + result.getAccessToken().getJwtToken()); 
     }, 

     onFailure: function (err) { 
      alert(err); 
     }, 

    }); 
+0

が見えます - これではありませんjava。 – ecoe

答えて

3

認証が唯一ではJavaScript、iOSとAndroidのを介して支持されています今回。認証に必要なapisは、ベータ期間中のサーバーSDK(java、pythonなど)の一部ではありません。ログインページから認証するには、JavaScript SDKを使用することをお勧めします。ここhttps://github.com/aws/amazon-cognito-identity-js

+0

私はとても近づき、JavaScriptに関するすべての指示に従っていなければなりません。使用例4に続いて、「ConfigError:設定に資格情報がありません」というメッセージが表示されます。 – user1432403

+0

これはJavaScript SDKの生成方法の成果物です。 JavaScript SDKでは、すべてのAWSサービスに資格情報が必要であると想定されていますが、一部のサービスでは認証されていないapisがあり、それらを必要としません。あなたの資格情報のためにACCESS_KEYとSECRET_KEYのようないくつかの値を入れたら、それはうまくいくはずです。 – behrooziAWS

+0

私は最終的に指示を読んで、クライアントシークレットボックスを生成せずにアプリケーションを作成しました。 – user1432403

2

チェックが、私はこのエラーを持つ停止し、これを含めた後

// Need to provide placeholder keys unless unauthorised user access is enabled for user pool 
AWSCognito.config.update({accessKeyId: 'anything', secretAccessKey: 'anything'}) 

が更新されていないコード

このページhttp://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.htmlの不足している行があります。

4

AWS Java SDKには、ユーザープール内のユーザーを認証するためのAPIが含まれています。 AWSCognitoIdentityProviderClientクラスのInitiateAuth APIまたはAdminInitiateAuth APIを使用してユーザーを認証できます。これらの2つのAPIの違いについては、ドキュメントで説明しています。要するに、InitiateAuthでは、SRP計算を実行してからAPIに渡す必要がありますが、AdminInitiateAuthではユーザー名とパスワードを直接渡すことができます。どちらのケースでも、セキュリティの意味を読んだり、どちらを使うかを決めることができます。

ドキュメント: https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html

APIリファレンス: https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html

https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html

私のワーキングサンプル(グルーヴィー):あなたはJavaScriptを使用しているよう

def login() { 
    AWSCognitoIdentityProviderClient client = new AWSCognitoIdentityProviderClient() 
    println("Provider client: " + client) 
    client.setRegion(Region.getRegion(Regions.AP_NORTHEAST_1)) 

    HashMap authParams = new HashMap<>() 
    authParams.put("USERNAME", "User1") 
    authParams.put("PASSWORD", "a*123") 
    AdminInitiateAuthRequest adminInitiateAuthRequest = new AdminInitiateAuthRequest() 
      .withClientId(<YOUR_CLIENT_ID>) 
      .withUserPoolId(<YOUR_USER_POOL_ID>) 
      .withAuthFlow(AuthFlowType.ADMIN_NO_SRP_AUTH) 
      .withAuthParameters(authParams) 
    AdminInitiateAuthResult result = client.adminInitiateAuth(adminInitiateAuthRequest); 
    if (result != null) { 
     System.out.println("AdminInitiateAuthResult:"); 
     System.out.println(result.toString()); 
    } else { 
     System.out.println("No result available"); 
     return; 
    } 
} 
+0

これは役に立ちました。AdminInitiateAuthResultを取得したら、どのようにユーザーデータを取得するのですか? – gremwell

+0

ああ、GetUserRequest getUserRequest = new GetUserRequest().AccessToken(initiateAuthResult.getAuthenticationResult()。getAccessToken()); GetUserResult getUserResult = client.getUser(getUserRequest); – gremwell

+0

ただし、adminInitiateAuthはAWS資格情報を必要とするため、この方法はその特権情報を持つユーザーにのみ有効です。 – ecoe

関連する問題