代码之家  ›  专栏  ›  技术社区  ›  KellyTheDev

在AWS Cognito中调用(Admin)InitiateAuthRequest以获取具有作用域的访问令牌

  •  0
  • KellyTheDev  · 技术社区  · 6 年前

    我需要公开一个api,它也允许我们获取范围,但是我使用awscognito的所有尝试都失败了。

    所以我希望能做到以下几点:

    1. 分配scope:foo to 现有用户和新用户
    2. 获取包含foo作用域的访问令牌(使用c#后端代码)

    第一部分:使用作用域获取访问令牌

    因此,要获得代币,需要以下步骤:

    var provider = new AmazonCognitoIdentityProviderClient(new BasicAWSCredentials(AccessKey, SecretKey));
    var request1 = new AdminInitiateAuthRequest
                {
                    UserPoolId = userPoolId,
                    ClientId = request.ClientId,
                    AuthFlow = AuthFlowType.ADMIN_NO_SRP_AUTH,
                    AuthParameters =
                    {
                        {"USERNAME", request.UserName},
                        {"PASSWORD", request.Password}
                    }
                };
    var response1 = await provider.InitiateAuthAsync(request);
    

    现在,我可以通过这个请求/响应获得令牌(显然是通过良好的凭证:)。我搞不懂的是怎么要求更多 scope 项目。目前它只返回 aws.cognito.signin.user.admin

    说到这里,我还添加了一个 custom:some-attribute 属性。我可以在UI中看到 General settings \ Attributes

    我发现我可以 更新 当我得到一个 OK|200 状态返回,但如果我尝试获取用户,则不会显示其更新的属性。

    var request2 = new AdminUpdateUserAttributesRequest
                {
                    UserAttributes = new List<AttributeType>
                        {
                           new AttributeType {
                               Name="custom:some-attribute",
                               Value=Guid.NewGuid().ToString("N")
                        };
                    UserPoolId = userPoolId,
                    Username = userName
                };
    
    var response2 = await provider.AdminUpdateUserAttributesAsync(request);
    

    var result = await _provider.GetUserAsync(new GetUserRequest
            {
                AccessToken = response1.AuthenticationResult.AccessToken
            });
    

    ... 新更新的变量未显示在 result.UserAttribues AttributeType

    也许我做错了,但是我不知道如何创建一个作用域(我想我可以通过custom属性做另一个选择)并获取作用域。

    谢谢, 凯莉

    1 回复  |  直到 6 年前
        1
  •  1
  •   KellyTheDev    6 年前

    哇,我 最后 我知道了。。。

    1. 正在获取标识令牌中的自定义属性。你必须设置属性的读写。这里有更多信息: https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html Attributes 要显示信息,可以打开或关闭一个区域进行读取,另一个区域进行写入。所以,呃,点击 Save app client changes ! 注意,这些更改将使它们能够显示在 Identity Token .