2

我正在编写一个控制台 POC 来演示 AWS cognito 身份验证 - 应用程序池不是联合身份,作为我们的 API 网关身份验证机制(不在 AWS 中托管)。这是用 C# 编写的。

我已经成功创建了一个用户,并确认了他们;但现在我需要进行身份验证以检索我可以传递并在下游验证的 JWT。

以下代码

 using (var client = new AmazonCognitoIdentityProviderClient())
            {
               var initAuthRequest = new InitiateAuthRequest();
                   initAuthRequest.AuthParameters.Add("USERNAME", username);
                   initAuthRequest.AuthParameters.Add("PASSWORD", password);
                   initAuthRequest.ClientId = clientId;
                   initAuthRequest.AuthFlow = AuthFlowType.USER_SRP_AUTH;
                   var response = client.InitiateAuth(initAuthRequest);
                   WriteLine("auth ok");
            }

产生此异常:

AWSSDK.Core.dll 中出现“Amazon.CognitoIdentityProvider.Model.InvalidParameterException”类型的未处理异常

附加信息:缺少必需的参数 SRP_A

我在 dotnet sdk 中找不到生成 SRP 标头的方法,有人可以帮忙吗?

谢谢KH

4

4 回答 4

3

实际上有一个新的扩展类,可以帮助解决这个问题。只需搜索此 NuGet 包:

AWSSDK.Extensions.CognitoAuthentication

可以在此处找到 GitHub 存储库。

一些例子可以在这里找到。第一个代码示例向您展示了如何执行 SRP 流程。

于 2019-01-18T15:42:52.590 回答
2

Cognito 用户池不支持来自 .NET SDK 的 SRP 身份验证。您将无法使用AuthFlowType.USER_SRP_AUTHAPIInitiateAuth调用。

如果您想直接使用 USERNAME 和 PASSWORD 登录,您可以查看使用AdminInitiateAuth API 和 ADMIN_NO_SRP_AUTH 流程的管理员身份验证流程。

于 2017-03-09T08:02:41.787 回答
2

正如 Chetan 所述,.NET SDK 不支持 SRP 身份验证。但是,应该可以通过使用 SRP 程序的第 3 方实现,可以在此处找到。

根据 Github 上的一些评论,这段代码应该可以工作(但不幸的是,自定义 SRP 身份验证实现对我不起作用,但也许对你有用)。

于 2017-03-20T15:28:23.857 回答
1

我想先介绍一下不熟悉 AWS .NET SDK;但是,以下内容可能会提供有用的见解。

AWS 在 JavaScript amazon-cognito-identity-js中提供了 Cognito Identity 帮助程序库,您可以查看源代码,特别是AuthenticationHelper.js文件,因为它包含用于计算 SRP 的逻辑。此外,还有一种计算 SRP_A 的方法,它是调用“initiateAuth”API 方法所需的参数。希望这可以帮助您朝着正确的方向前进。

作为旁注,您可能会注意到 amazon-cognito-identity-js 库依赖于一个大整数库来处理影响精度准确性的 JavaScript Number 数据类型固有的重要性丢失问题。首先,我提到这一点是因为我不熟悉这个算术问题是否与 .NET 的上下文相关,因为它与 SRP 计算有关。

于 2018-02-06T04:55:47.963 回答