身份验证AWS Cognito SRP

时间:2017-03-08 10:20:40

标签: amazon-web-services aws-sdk amazon-cognito aws-cognito

我正在编写一个控制台POC来演示AWS认证身份验证 - App Pool不是联合身份,作为我们的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");
            }

产生此异常:

  

未处理的类型异常   ' Amazon.CognitoIdentityProvider.Model.InvalidParameterException'   发生在AWSSDK.Core.dll

     

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

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

由于 KH

4 个答案:

答案 0 :(得分:2)

Cognito用户池不支持.NET SDK的SRP身份验证。您将无法在AuthFlowType.USER_SRP_AUTH API调用中使用InitiateAuth

如果您想直接使用USERNAME和PASSWORD登录,可以查看使用Admin Authentication flow API和ADMIN_NO_SRP_AUTH流程的AdminInitiateAuth

答案 1 :(得分:2)

正如Chetan所说,.NET SDK不支持SRP身份验证。但是,应该可以通过使用可以找到的here的SRP过程的某些第三方实现来实现。

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

答案 2 :(得分:1)

我想在序言中不熟悉AWS .NET SDK;但是,以下内容可能会提供有用的见解。

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

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

答案 3 :(得分:1)

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

>>>
>>> str1 = "# This is a Phone Number"
>>> str2 = str1.replace("#", "/*") + " */"
>>>
>>> str2
'/* This is a Phone Number */'
>>>

可以在here上找到GitHub存储库。

可以找到一些示例here。第一个代码示例向您展示了如何进行SRP流程。