身份验证AWS Cognito SRP

3
我正在编写一个控制台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个回答

3

实际上有一个新的扩展类,可以帮助您达到这个目的。只需搜索此NuGet软件包:

AWSSDK.Extensions.CognitoAuthentication

GitHub仓库可以在这里找到。

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


2
Cognito用户池不支持从.NET SDK进行SRP身份验证。您将无法在InitiateAuth API调用中使用AuthFlowType.USER_SRP_AUTH
如果您想直接使用用户名和密码进行登录,则可以查看管理员身份验证流程,该流程使用AdminInitiateAuth API和ADMIN_NO_SRP_AUTH流程。

这个到底怎么用啊?我在亚马逊教程上找了很久,想让它正常工作,但一直提示“缺少身份验证令牌”。 - undefined

2

正如Chetan所说,.NET SDK不支持SRP身份验证。然而,可以通过使用一些第三方SRP过程的实现来实现,可以在这里找到。

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


1

我想先说明一下,我不熟悉AWS .NET SDK;然而,以下内容可能会提供有用的见解。

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

顺便说一句,您可能会注意到amazon-cognito-identity-js库依赖于一个大整数库,以处理与JavaScript Number数据类型固有的精度损失问题相关的精度问题。主要是因为我不知道这个算术问题是否与.NET上的SRP计算有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接