我如何获得AWS的证书?我必须使用AWS Cognito SDK或AWS SDK



我正在使用AWS SDK为AWS S3构建一个丰富的前端客户端。硬代码IAM凭据符合AWS SDK配置的功能正常,但是我想通过AWS Cognito提供对最终用户的访问。

如何获得我在Cognito用户池中创建的用户的凭据?

AWS文档尚不清楚。我见过的示例使用了AWS SDK,我看到的示例说您需要具有不同的AWS Cognito SDK。哪个文档文章正确?

对于这个特定项目,我不是完全想使用第三方联合身份。


更新2:

AWS Cognito SDK已合并到一个名为AWS Amplify的新库中。https://github.com/aws/aws-amplify

更新1:

问题是两个倍。了解术语并正确设置Cognito是第一部分。感谢Bruce0让我开始跑到那里。第二部分是JavaScript部分。事实证明,您需要两个单独的库来纯粹从JavaScript身份验证Cognito用户。

这是我提出的解决方案。如果对您来说看起来很陌生,请确保您已经通过承诺/异步/等待ES6学习。要在节点中运行它,您只需要使用Babel,Prest ES2015,Preset Stage-2和Babel-Transform-Runtime插件进行预处理。如果您想在浏览器中运行它,则可能需要将Babel-Loader与WebPack一起使用(众所周知,设置很复杂,只是预警)。

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/7344c6e1f56051da0758d1403a434343b1

获得Cognito凭据的唯一方法是创建一个联合身份池。CognitoIdentity和证书提供的方法是您获得凭据的方式。

您不必联合身份来使用联合身份池,但是您需要拥有一个IndifyityID(并且仅存在于池中)才能获得凭据。

因此,您将拥有一个认知的人,是联合身份池中唯一的身份验证提供商(没有任何东西会联合起来),并且该身份池提供(通常是认证和未经认可)(但您可以拥有更多的角色)。/p>

这是一个链接,解释了Cognito的一些基本混乱方面的链接,我希望这会有所帮助。cognito大纲

最后,我建议您使用AWS移动中心(至少为示例)开始实施,而不是使用iOS SDK。移动枢纽是一个薄的包装器,但进行了很多抬起的抬起,并且构造得很好。

这对我有效,我设置了Cognito来创建一个身份池,而IAM将配置文件添加到用户中(我完全遵循了此链接:https://docs。aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html)

import S3 from 'aws-sdk/clients/s3'
import AWS from 'aws-sdk/global'
AWS.config.update({
  region: process.env.AZ_REGION,
  credentials: new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'XXX'
  })
});
const s3 = new AWS.S3({
apiVersion: '2006-03-01',
params: {Bucket: process.env.AZ_BUCKETNAME},
      });

我只希望我们不需要导入AWS-SDK/Global IT本身是206K未经证明的。那很多要扔给用户。

相关内容

  • 没有找到相关文章

最新更新