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



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

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

  1. 将范围:FOO 分配给现有用户和新用户
  2. 获取包含该 foo 范围的访问令牌(使用 C# 后端代码(

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

因此,对于获取令牌,如下所示:

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屏幕。顺便说一句,我没有任何 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.UserAttribuesAttributeType列表中。

也许我做错了,但我无法弄清楚如何创建一个范围(我认为我可以通过自定义属性做一个替代方案(并获取范围。

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

谢谢 凯利

哇,我终于想通了...

  1. 我还没有完全弄清楚这一点,它会很棒,但有自定义属性进来(数字 2(。我可能会检查一下可以。

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

最新更新