c# - 在 AWS Cognito 中调用 (Admin)InitiateAuthRequest 以获取具有范围的访问令牌
问题描述
我需要公开一个 api,这也允许我们获得范围,但是我使用 aws cognito 的所有尝试都失败了。
所以我希望做到以下几点:
- 将 scope:foo 分配给现有用户和新用户
- 获取包含 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
列表中。
也许我做错了,但我不知道如何创建一个范围(我想我可以通过自定义属性做一个替代)并获取范围。
同样,我无法弄清楚在对令牌进行身份验证时如何传递范围。
谢谢,凯利
解决方案
哇,我终于想通了……
我还没有完全弄清楚这一点,它会很棒,但是随着自定义属性的出现(第 2 号)。我可以将其勾选为 OK。
在身份令牌中获取自定义属性。你必须设置他读写属性。这里有更多信息:https ://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html 。基本上选择区域,它会展开
Attributes
以显示您可以打开或关闭的信息,其中一个区域用于读取,另一个区域用于写入。所以呃,点击点击和Save app client changes
!请注意,这些更改将使它们能够显示在Identity Token
.
推荐阅读
- primary-key - 描述表以获取 Apache Derby 中表的主键
- reactjs - Redux Field Array field.get(),无法根据类型改变输入
- c# - 调用存储过程后超时
- laravel-5 - Laravel Resource whenLoaded 不适用于 hasOne & belongsTo 关系
- mysql - 将 percona 数据库转储加载到 mysql
- javascript - 如何在 HTML 中操作变量?
- hibernate - 无法将类型“java.lang.String”的属性值转换为属性“user”所需的类型“server.model.User”
- sql-server - 是否总是需要将分区列添加到查询中以扫描分区?
- mapstruct - MapStruct 1.3.0.Final。不要忽略非 getter-setter 方法
- javascript - java脚本没有在html中应用点击事件