我正在尝试建立一个基本网站(AWS上无服务器),允许访问者使用Google和/或Facebook登录.目前我计划使用S3,Cognito with Federated Identities,API Gateway,Lambda(NodeJS)和DynamoDB.客户端应用程序将使用Angular.
我有谷歌和Facebook的社交登录工作,目前我在第一次登录时,在"用户"表中插入一行,其中包括cognitoId,名称,个人资料图片URL等.
我还认为以用他们的电子邮件地址作为密钥存储用户信息是一个很好的设计,而不是像cognitoId这样的东西,以便用户可以使用不同的提供商登录并查看相同的数据.所以我需要知道经过身份验证的用户的电子邮件地址,但我认为它应该来自Cognito,而不是直接来自用户(因为客户端应用程序不应该被信任).
我相信Cognito存储用户的电子邮件地址,因为我在用户池中根据需要启用了该字段.
我遇到的问题是我找不到任何有关如何从Cognito获取用户电子邮件地址的信息.
我最接近的是这篇文章,但我无法在任何地方找到访问令牌:如何使用cognito身份标识获取用户属性(用户名,电子邮件等)
这篇文章表明我可以使用GetUser,但我再次不知道AccessToken的来源:使用AWS cognito身份创建用户
如果我确实需要使用GetUser和AccessToken,它来自何处,以及如何生成它?它是来自客户端,还是我可以使用AWS.config.credentials在Lambda中获取它?
我一直试图弄清楚这一段时间,我觉得我错过了一些非常简单的东西!
federated-identity amazon-web-services aws-lambda aws-cognito
Cognito Console中的标识池在哪里.如文档中所述,它具有以下格式:
IdentityPoolId
标识为REGION:GUID的标识池标识.
但我只看到Pool Id并Pool ARN在控制台中.哪种格式不同.
我当前的项目是在AWS中,将Cognito和微服务与Lambda结合使用。我们已经使用DDD设计了微服务,并且正在实现基本功能。
但是,业务需要API的用户能够被分类到为其工作的客户公司中,并且只能访问该客户公司的数据以及我们将拥有的任何基于角色的身份验证。
这不是一个完整的多租户解决方案,因为每个用户都将使用相同的网站,但是他们的帐户将与特定的客户端关联。
我所读到的有关在AWS中执行类似操作的所有内容都建议每个客户端使用一个用户角色或池,并在创建用户时将其与用户相关联,但是我们不希望这样做,因为客户端通常由2-3个用户组成,并且有很多客户。就用户池数量而言,这将很快变得难以维持。
我试图使用“常规”方式来思考解决此问题的方法,例如将域服务添加到体系结构中,该域服务专门设计用于通过调用用户微服务来将特定用户的客户端数据添加到每个请求,但这似乎过度复杂。我还考虑过更改体系结构以在每个微服务中包括基本用户和角色信息,但这似乎很麻烦。
我的问题是,是否有任何官方支持的方式以编程方式将数据添加到AWS Cognito配置文件中,并且以这种方式可以在创建账户后由客户端管理员通过前端网站进行更改?即使只是令牌中的clientId字段。
如果不是,那么遇到类似问题的任何人都会推荐什么作为用户池建议的替代方案。
谢谢。
编辑:
我也一直在调查几种方法可以做Cognito此配置文件使用属性,提到这里。似乎这是或多或少地实现我想要实现的目标的方法,但是我仍然希望听到有关替代方案或建议的信息。
authentication multi-tenant amazon-web-services microservices aws-cognito
有没有办法在Amazon Cognito用户池中对用户强制实施密码过期策略?
我正在尝试使用带有cognito用户池的aws api网关授权程序.当我使用aws api网关控制台进行测试时,它工作正常.
但是,当我尝试在api中启用授权时,"message": "Unauthorized".请检查下面的屏幕截图
请有人帮忙吗.
仅供参考我遵循这里提到的说明http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html
通过cognito admin API,如何设置用户密码?创建用户时,我可以设置临时密码,我需要能够对现有用户执行此操作.
现在,我正在努力了解AWS Cognito所以也许有人可以帮助我.我设置了一个域来为我的用户池提供Cognito的托管UI,就像这里描述的那样.因此,当我访问时,https://<my-domain>.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=<MY_POOL_CLIENT_ID>&redirect_uri=https://localhost:8080我会看到一个登录页面,我的用户可以通过Google登录我的应用程序.那部分工作得很好.
我很困惑在用户登录后如何处理从该页面返回的代码.因此,一旦我被重定向到Google并授权应用程序查看我的信息,我将被重定向回我的一个URL并带有代码查询参数.现在我正在重定向到localhost,因此重定向URL如下所示:
https://localhost:8080/?code=XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX
这段代码究竟是什么?另外,如何使用它来为我的用户访问AWS资源?
javascript amazon-web-services amazon-cognito aws-sdk aws-cognito
我正在开发一个使用AWS服务后端的Web应用程序.我正在使用AWS Cognito来管理用户,但我遇到了问题.当我创建一个新用户(使用临时密码)时,我需要手动更改此密码以使其确定.我必须更改密码的唯一方法是使用AWS Cli,如下所述:
https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/change-password.html
我必须在shell中键入旧密码,新密码和访问令牌.问题是:我在哪里找到这个"访问令牌"?我不知道在shell中输入什么!AWS Cognito控制台无济于事.
我想我在这里试过所有的房产:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html
无法检查此框:
我的配置目前:
CognitoUserPoolGeneral:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: general
Policies:
PasswordPolicy:
MinimumLength: 6
RequireLowercase: false
RequireNumbers: false
RequireSymbols: false
RequireUppercase: false
Schema:
- AttributeDataType: String
Name: preferredLocale
DeveloperOnlyAttribute: false
Mutable: true
Required: false
EmailVerificationMessage: "Here's your verification code: {####}. Please provide it inside the application."
EmailVerificationSubject: "subject"
Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation amazon-cognito aws-cognito
我正在使用AWS Cognito构建无服务器后端以进行用户管理.
Cognito使用两者cognitoId并sub识别用户.
来自官方awslabs的这个项目使用cognitoId作为数据库表中的主键,将数据链接到用户对象,但有关sub明确说明的文档:
sub:已通过身份验证的用户的UUID.这跟不一样username.
问题:我应该使用什么作为主键,cognitoID或者sub?