更新AWS Cognito用户的自定义属性,而无需登录用户

时间:2019-11-28 10:41:43

标签: asp.net asp.net-core amazon-cognito

我正在开发一个新项目,这是我第一次同时使用Vue js和AWS Cognito。我发现Cognito文档很难找到,或者根本就找不到。

在Vue应用程序中,我正在使用Amplify来处理所有运行良好的用户管理。

在用户池中,我添加了2个自定义属性:

  • custom:first_name
  • custom:last_name

在Vue应用程序中,我将报价请求发布到.net核心api,其中包含各种详细信息以及登录用户的cognito用户名以及名字和姓氏:

{
    "details": "all kinds of quote details",
    "user": {
        "cognitoUsername": "fd17f624-cf31-11e9-904a-88d7f67d5c52",
        "firstName": "Carel",
        "lastName": "Nel"
    }
}

使用Amazon.Extensions.CognitoAuthentication库,我可以查询其所有属性的认知用户记录:

cognitoUser = await _pool.FindByIdAsync(model.User.CognitoUsername);

接下来,我的计划是在通过所有其他各种验证检查之后,通过此API post方法更新池中的custom:first_namecustom:last_name属性。如果尝试更新,则会出现以下错误:

if (attributesChanged)
{
    await cognitoUser.UpdateAttributesAsync(userAttributes);
    // Error: "Database Failure - User is not authenticated."
}

为了对此进行一点测试,我尝试了以下方法,然后起作用了:

if (attributesChanged)
{
    await _signInManager.PasswordSignInAsync(cognitoUser, "password", false, false);
    await cognitoUser.UpdateAttributesAsync(userAttributes);
}

因此,如果我使用密码登录用户,则可以成功更新认知池中的自定义属性。但是,我不想这样做。是否可以在API上设置某种管理员用户配置,以使我可以在不登录特定用户的情况下更新用户池记录,或者我可以(应该)为登录用户传递一些jwt令牌吗?从Vue应用程序到API,并以某种方式使用它来确保身份验证?

1 个答案:

答案 0 :(得分:1)

您需要为应用客户端分配aws.cognito.signin.user.admin范围。然后,您应该能够通过该用户修改用户属性。

https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html

检查有关aws.cognito.signin.user.admin范围的“允许的OAuth范围”部分。