【问题标题】:Amazon Cognito AuthFlowAmazon Cognito AuthFlow
【发布时间】:2017-01-14 10:12:49
【问题描述】:

有点多问,但是,

如何在 .NET 中使用 Amazon Cognito 用户池执行身份验证。 我正在使用以下内容启动身份验证:

var response1 = client.InitiateAuth(new InitiateAuthRequest()
            {
                AuthFlow = AuthFlowType.USER_SRP_AUTH,
                AuthParameters = new Dictionary<string, string>()
                {
                    {"USERNAME","User" },
                    {"SRP_A"  ,  A }
                },
                ClientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
            });

他们的文档非常非常糟糕,当我想应对挑战时,我似乎找不到要通过的内容。

client.RespondToAuthChallenge(new RespondToAuthChallengeRequest()
        {
            ChallengeName = ChallengeNameType.PASSWORD_VERIFIER,
            ChallengeResponses = { /*WHAT am I supposed to add here, and where can I find any documnetation on what is expected?*/ },
            Session =  response1.Session,
            ClientId = "xxxxxxxxxxxxx"
        });

附带说明,我想使用 Cognito 联合身份来保护自定义 .Net API,所以我的想法是使用 Cognito 返回的令牌作为 JWT 传递到 webapi 端,然后我将在那里解码和验证令牌。这是使用 Amazon Cognito 的预期方式吗? (至少现在我不想使用亚马逊 API 网关)。

我假设它只是使用默认的 JWT 中间件配置 OWIN,还是我应该期待其他的东西?

【问题讨论】:

  • 您的旁注基本上是正确的:用户池为您提供与 Google 等非常相似的 JWT 令牌......,并且身份池以相同的方式使用。
  • 关于 SRP,it's a standard algorithm,但我还没有在 C# 中针对 Cognito 使用它。
  • “他们的文档非常非常糟糕,当我想应对挑战时,我似乎找不到要通过什么。”。我同意。它非常非常详细地介绍了 cognito 的工作原理,但没有明确的路线图或关于如何在 .net 中使用它的示例。非常令人沮丧!我经常发现自己试图重复文档中列出的步骤,结果却放弃了。我最近发现,我试图复制的是对幕后发生的事情的描述,而不是我需要做什么才能使用它。

标签: .net amazon-web-services asp.net-web-api amazon-ec2 amazon-cognito


【解决方案1】:

developer guide 涉及发起身份验证和响应身份验证挑战的请求中需要包含哪些内容。

您可能会发现使用 AdminInitiateAuth API(详细信息在同一链接中)可以更轻松地将 srp 身份验证卸载到 Cognito,该 API 将为您填补这些空白。

移动 SDK 为您提供围绕 SRP 身份验证的包装器,可帮助填写这些参数,但其他 SDK 没有此类功能。您可以使用 SDK(所有这些都位于 GitHub 中)的代码来填写 SRP_A 之类的内容,但您可能会发现仅使用 AdminInitiateAuth 会容易得多。

【讨论】:

  • AdminInitiateAuth 不会“卸载 srp 身份验证” - 因此流名称为 ADMIN_NO_SRP_AUTH。 SRP 是避免通过网络发送密码的算法,因此使用AdminInitiateAuth 严格来说不太安全,尽管它基本上是互联网上所有其他登录页面所做的。基本上它是供服务器端使用的。
  • 它确实卸载了它。 cognito 服务器代表您执行 srp,但要这样做,它需要用户名和密码才能充当事实上的客户端。由于您的推断是公平的,因此文档可能对此并不十分清楚,但确实可以减轻负担。来源:我在 cognito 团队
  • 这个名字背后的想法是你不必做 SRP,它看起来像互联网上的每个登录页面,但在后台它使用相同的后端存储,这样做是利用 SRP。
  • 我的立场是正确的!考虑一下,您将需要在内部进行一些 SRP 计算以验证密码的存储方式,但它是否真的也在执行所有 HTTP 请求?这看起来很奇怪。
【解决方案2】:

这里的这个人描述了如何在 .NET 应用程序中进行 SRP 计算。我必须添加一些逻辑来更新在控制台中创建用户时发出的临时密码,但除此之外它就像一个魅力

AWS Cognito SRP Login in C# / .NET

【讨论】:

    【解决方案3】:

    这是一个使用RespondToAuthChallengeAsyncChallengeResponses的例子

    var RespondToAuthChallengeRequest = new RespondToAuthChallengeRequest
    {
        ChallengeName = ChallengeNameType.PASSWORD_VERIFIER,
        ClientId = "appClientId",
        ChallengeResponses = new Dictionary<string, string>
           {
               { "USERNAME", username },
               { "NEW_PASSWORD", password }
           },
        Session = response1.Session
    };
    
    var respondToAuthChallengeResponse = await client
            .RespondToAuthChallengeAsync(respondToAuthChallengeRequest);
    

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2017-01-26
      • 2020-07-10
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多