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

C# 在AWS Cognito中调用(Admin)InitiateAuthRequest以获取具有作用域的访问令牌,c#,amazon-web-services,.net-core,amazon-cognito,C#,Amazon Web Services,.net Core,Amazon Cognito,我需要公开一个api,它也允许我们获取范围,但是我使用aws cognito的所有尝试都失败了 所以我希望能做到以下几点: var provider = new AmazonCognitoIdentityProviderClient(new BasicAWSCredentials(AccessKey, SecretKey)); var request1 = new AdminInitiateAuthRequest { UserPoolId

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

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

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);
  • 将作用域: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

    第二部分:用户属性

    话虽如此,我还添加了一个
    自定义:some属性
    属性。我可以在
    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);
    
    。。。我新更新的变量未显示在
    结果中。userattributes
    AttributeType
    列表中

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

    同样,我也不知道在对令牌进行身份验证时如何传入范围

    谢谢,
    凯莉

    哇,我终于明白了

  • 我还没有完全弄明白这一点,最好是,但有了自定义属性(第2个)。我可以核对一下

  • 获取标识令牌内的自定义属性。您必须设置该属性的读写。此处有有关此的详细信息:。基本上选择该区域,然后它展开
    属性
    ,以显示您可以打开或关闭的信息,其中一个区域用于读取,另一个区域用于写入。因此,嗯,单击并
    保存应用程序客户端更改
    !注意,这些更改将使它们显示在
    标识令牌中