【问题标题】:Calling (Admin)InitiateAuthRequest in the AWS Cognito To Get an Access Token with Scopes在 AWS Cognito 中调用 (Admin)InitiateAuthRequest 以获取具有范围的访问令牌
【发布时间】:2019-02-25 03:32:02
【问题描述】:

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

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

  1. 将 scope:foo 分配给现有用户和新用户
  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 属性。我可以在 General settings \ Attributes 屏幕的 UI 中看到它。顺便说一句,我没有设置任何 lambda 触发器。

我发现我可以更新用户设置,因为我返回了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 列表中。

也许我做错了,但我不知道如何创建一个范围(我想我可以通过自定义属性做一个替代)并获取范围。

同样,我无法弄清楚在对令牌进行身份验证时如何传入范围。

谢谢, 凯莉

【问题讨论】:

    标签: c# amazon-web-services .net-core amazon-cognito


    【解决方案1】:

    哇,我终于想通了……

    1. 我还没有完全弄清楚这一点,它会很棒,但是有自定义属性进来(数字 2)。我可以将其勾选为 OK。

    2. 在身份令牌中获取自定义属性。你必须设置他的读写属性。这里有更多信息:https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html。基本上选择区域,它会扩展Attributes 以显示您可以打开或关闭的信息,其中一个区域用于读取,另一个区域用于写入。所以呃,点击点击和Save app client changes!请注意,这些更改将使它们能够显示在 Identity Token 中。

    【讨论】:

      猜你喜欢
      • 2020-04-25
      • 2023-03-23
      • 2018-04-01
      • 2020-11-20
      • 2018-06-07
      • 2022-01-20
      • 1970-01-01
      • 2016-10-25
      相关资源
      最近更新 更多