web-dev-qa-db-ja.com

AWSCognitoユーザープールに対して認証するにはどうすればよいですか

Cognitoユーザープールを作成しました。 Java AWS SDKからAWSCognitoIdentityProviderClientを使用して、ユーザーを一覧表示し、ユーザーを追加できます。

ただし、カスタムログインページがあり、入力したユーザー名とパスワードを取得して、ユーザープールに対して認証したいと考えています。 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);
        },

    });
7
user1432403

AWS Java SDKには、ユーザープール内のユーザーを認証するためのAPIが含まれています。AWSCognitoIdentityProviderClientクラスのInitiateAuthapiまたはAdminInitiateAuthapiのいずれかを使用してユーザーを認証できます。これら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

私の作業サンプル(Groovy):

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;
    }
}
12
neel

認証は、JavaScript、iOS、およびAndroidの時点でのみサポートされています。認証に必要なAPIは、サーバーSDK(Java、python et。すべて)ベータ期間中。 JavaScript SDK を使用することは、ログインページから認証するための推奨される方法です。

3
behrooziAWS

ここをチェックしてください https://github.com/aws/Amazon-cognito-identity-js

コードの行がありません

このページ http://docs.aws.Amazon.com/cognito/latest/developerguide/using-Amazon-cognito-user-identity-pools-javascript-examples.html 更新されていません

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

これを含めた後、私はこのエラーが発生しなくなりました。

2
Lucas Eduardo R