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

时间:2018-09-20 18:58:31

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

我需要公开一个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列表中。

也许我做错了,但是我无法弄清楚如何创建范围(我想我可以通过custom属性来做一个替代方案)并获得范围。

同样,我无法弄清楚在验证令牌时如何传递作用域。

谢谢, 凯莉

1 个答案:

答案 0 :(得分:0)

哇,我最终知道了...

  1. 我仍然还没有弄清楚这一点,这很好,但是有了自定义属性(第2个)。我可以选择“确定”。

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