【发布时间】:2021-02-24 18:30:51
【问题描述】:
我正在学习将 AWS 与 ASP .NET Core 站点集成。我使用 AWS Cognito 作为用户存储。我创建了一个注册表单,它实际上充当了 AWS Cognito 的接口。到目前为止,我已经完成了以下步骤:
-
在 AWS Cognito 中创建了一个用户池。
-
在 IAM 服务中创建了一个用户。将现有策略“AmazonCognitoDeveloperAuthenticatedIdentities”附加到此用户。
-
在 Windows 中的用户配置文件目录中创建了一个凭据文件。在此文件中设置 aws_access_key_id 和 aws_secret_access_key
-
在 appsettings.json 文件中创建了一个 AWS 部分并设置密钥如下(我隐藏了用户池客户端密码):
"AWS": { "Region": "us-east-2", "UserPoolClientId": "44m80ksabq0knieeg81ina2npj", "UserPoolClientSecret": XXXXXX, "UserPoolId": "us-east-2_115WHTcaH" } -
我已导入 Amazon.AspNetCore.Identity.Cognito 和 Amazon.Extensions.CognitoAuthentication nuget 包。使用这些包,我已将 CognitoUser 作为 T 参数传递给 ASP .NET Core Identity 类的 SignInManager 和 UserManager。下面是控制器的完整代码。
public class Accounts : Controller { SignInManager<CognitoUser> _signInManager; UserManager<CognitoUser> _userManager; CognitoUserPool _pool; public Accounts(SignInManager<CognitoUser> signInManager, UserManager<CognitoUser> userManager, CognitoUserPool pool) { _signInManager = signInManager; _userManager = userManager; _pool = pool; } [HttpPost] public async Task<IActionResult> SignUp(SignupModel model) { if (ModelState.IsValid) { var user = _pool.GetUser(model.Email); if (user.Status != null) { ModelState.AddModelError("UserExists", "User with this email already exists"); return View(model); } user.Attributes.Add(CognitoAttribute.Name.AttributeName, model.Email); var createdUser = await _userManager.CreateAsync(user, model.Password); if (createdUser.Succeeded) { RedirectToAction("Confirm"); } } return View(); } }
当我执行此代码时,我在尝试创建用户 (await _userManager.CreateAsync(user, model.Password)) 时遇到错误
AmazonCognitoIdentityProviderException: User: arn:aws:iam::777844316068:user/xxxx is not authorized to perform: cognito-idp:DescribeUserPool on resource: arn:aws:cognito-idp:us-east-2:777844316068:userpool/us-east-2_115WHTcaH
我知道这与 IAM 的政策有关,但我无法弄清楚我缺少的确切设置。有人可以帮忙吗?
【问题讨论】:
标签: c# amazon-web-services asp.net-core