AWSで認証情報を取得するにはどうすればよいですか?AWS CognitoSDKまたはAWSSDKを使用する必要がありますか?

スティーブン

AWS SDKを使用して、AWSS3用のリッチなフロントエンドクライアントを構築しています。IAM認証情報をAWSSDK構成にハードコーディングすることは問題なく機能しますが、AWSCognitoを介してエンドユーザーへのアクセスをプロビジョニングしたいと思います。

Cognitoユーザープールで作成したユーザーの資格情報を取得するにはどうすればよいですか?

AWSのドキュメントは非常に不明確です。AWS SDKを使用して見た例と、別のAWS CognitoSDKが必要だと言っている例があります。どのドキュメント記事が正しいですか?

この特定のプロジェクトでは、サードパーティのフェデレーションIDをまったく使用したくありません


更新2:

AWS Cognito SDKは、AWSAmplifyと呼ばれる新しいライブラリに統合されました。https://github.com/aws/aws-amplify

更新1:

問題は2つあります。用語を理解し、Cognitoを適切に設定することが最初の部分です。Bruce0に私を立ち上げて実行してくれてありがとう。2番目の部分はjavascriptの部分です。純粋にjavascriptからCognitoユーザーを認証するには、2つの別個のライブラリが必要であることがわかりました。

これが私が思いついた解決策です。異質に見える場合は、promise / async / awaitを使用してes6について学習したことを確認してください。ノードで実行するには、babel、プリセットes2015、プリセットstage-2、およびbabel-transform-runtimeプラグインを使用して前処理する必要があります。ブラウザで実行する場合は、おそらくwebpackでbabel-loaderを使用する必要があります(セットアップが複雑なことで有名ですが、事前に警告します)。

import AWS from 'aws-sdk/global';
import S3 from 'aws-sdk/clients/s3';
import {
  AuthenticationDetails,
  CognitoUser,
  CognitoUserPool,
} from 'amazon-cognito-identity-js';

const REGION = 'some-string-value';
const USER_POOL_ID = 'some-string-value';
const IDENTITY_POOL_ID = 'some-string-value';
const APP_CLIENT_ID = 'some-string-value';
const POOL_KEY = `cognito-idp.${REGION}.amazonaws.com/${USER_POOL_ID}`;

let Username = 'some-string-value';
let Password = 'some-string-value';

let authenticationDetails = new AuthenticationDetails({
  Username,
  Password
});

let userPool = new CognitoUserPool({
  UserPoolId: USER_POOL_ID,
  ClientId: APP_CLIENT_ID
});

let cognitoUser = new CognitoUser({
  Username,
  Pool: userPool
});

let skateboards = {
  mfaRequired(codeDeliveryDetails) {
    let mfaCode = prompt('MFA code is required!');

    cognitoUser.sendMFACode(mfaCode, mfaRequired);
  },
  newPasswordRequired(userAttributes, requiredAttributes) {
    delete userAttributes.email_verified; // it's returned but not valid to submit

    let newPassword = prompt('A new password is required!');

    cognitoUser.completeNewPasswordChallenge(newPassword, userAttributes, newPasswordRequired);
  }
};

let updateAWSCreds = (jwtToken) => {
  AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: IDENTITY_POOL_ID,
    Logins: {
      [POOL_KEY]: jwtToken
    }
  });
};

let authenticateCognitoUser = async ({mfaRequired, newPasswordRequired} = skateboards) => {
  return new Promise((resolve, reject) => {
    cognitoUser.authenticateUser(authenticationDetails, {
      onSuccess(result) {
        let jwtToken = result.getIdToken().getJwtToken();
        updateAWSCreds(jwtToken);
        resolve();
      },
      onFailure(err) {
        reject(err);
      },
      mfaRequired,
      newPasswordRequired
    });
  });
};

let doSomethingInS3ForExample = async () => {
  await authenticateCognitoUser();

  // now do your stuff
};

doSomethingInS3ForExample();

https://gist.github.com/sbussard/7344c6e1f56051da0758d1403a4343b1

ブルース0

Cognitoで資格情報を取得する唯一の方法は、フェデレーションIDプールを作成することです。cognitoIdentityメソッドとcredentialsProviderメソッドは、資格情報を取得する方法です。

フェデレーションIDプールを使用するためにIDをフェデレートする必要はありませんが、資格情報を取得するには、identityId(およびプールにのみ存在する)が必要です。

したがって、フェデレーションIDプール内の唯一の認証プロバイダーとしてcognitoUserPoolがあり(フェデレーションはありません)、IAMロールはそのIDプールによって提供されます(通常は認証済みおよび未認証)(ただし、より多くのロールを持つことができます)。

これは、Cognitoの基本的な紛らわしい側面のいくつかを説明するパワーポイントへのリンクです。それがお役に立てば幸いです。コグニートの概要

最後に、IOS SDKを使用するのではなく、(少なくとも例として)AWS MobileHubを使用して実装を開始することをお勧めします。モバイルハブは薄いラッパーですが、多くのヒービングリフティングを行い、うまく設計されています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ