身份验证 AWS 学习 SRP
Authentication AWS Cognito SRP
我正在编写一个控制台 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");
}
产生此异常:
An unhandled exception of type
'Amazon.CognitoIdentityProvider.Model.InvalidParameterException'
occurred in AWSSDK.Core.dll
Additional information: Missing required parameter SRP_A
我在 dotnet sdk 中找不到生成 SRP 的方法 header,有人可以帮忙吗?
谢谢
KH
Cognito 用户池不支持来自 .NET SDK 的 SRP 身份验证。您将无法在 InitiateAuth
API 调用中使用 AuthFlowType.USER_SRP_AUTH
。
如果您想直接使用 USERNAME 和 PASSWORD 登录,您可以查看 Admin Authentication flow which uses the AdminInitiateAuth API 和 ADMIN_NO_SRP_AUTH 流程。
正如 Chetan 所说,.NET SDK 不支持 SRP 身份验证。但是,应该可以通过使用 SRP 程序的某些第 3 方实现来实现,可以在 here.
中找到
根据 Github 上的一些评论,这段代码应该可以工作(但不幸的是,自定义 SRP 身份验证实现对我不起作用,但也许对你有用)。
不熟悉AWS .NET SDK的我先说一下;但是,以下内容可能会提供有用的见解。
AWS 在 JavaScript amazon-cognito-identity-js you can review the source code specifically the AuthenticationHelper.js 文件中提供了一个 Cognito Identity 帮助程序库,因为它包含用于计算 SRP 的逻辑。此外,还有一种计算SRP_A的方法,它是调用"initiateAuth"API方法所需的参数。希望这可以帮助您朝着正确的方向前进。
附带说明一下,您可能会注意到 amazon-cognito-identity-js 库依赖于一个大整数库来处理影响准确性的 JavaScript 数字数据类型固有的重要性丢失问题精度。首先,我提到这个是因为我不熟悉这个算术问题是否与 .NET 上下文相关,因为它与 SRP 计算有关。
实际上有一个新的扩展程序 class,可以帮助解决这个问题。只需搜索此 NuGet 包:
AWSSDK.Extensions.CognitoAuthentication
可以找到 GitHub 存储库 here。
可以找到一些示例 here。第一个代码示例向您展示了如何执行 SRP 流。
我正在编写一个控制台 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");
}
产生此异常:
An unhandled exception of type 'Amazon.CognitoIdentityProvider.Model.InvalidParameterException' occurred in AWSSDK.Core.dll
Additional information: Missing required parameter SRP_A
我在 dotnet sdk 中找不到生成 SRP 的方法 header,有人可以帮忙吗?
谢谢 KH
Cognito 用户池不支持来自 .NET SDK 的 SRP 身份验证。您将无法在 InitiateAuth
API 调用中使用 AuthFlowType.USER_SRP_AUTH
。
如果您想直接使用 USERNAME 和 PASSWORD 登录,您可以查看 Admin Authentication flow which uses the AdminInitiateAuth API 和 ADMIN_NO_SRP_AUTH 流程。
正如 Chetan 所说,.NET SDK 不支持 SRP 身份验证。但是,应该可以通过使用 SRP 程序的某些第 3 方实现来实现,可以在 here.
中找到根据 Github 上的一些评论,这段代码应该可以工作(但不幸的是,自定义 SRP 身份验证实现对我不起作用,但也许对你有用)。
不熟悉AWS .NET SDK的我先说一下;但是,以下内容可能会提供有用的见解。
AWS 在 JavaScript amazon-cognito-identity-js you can review the source code specifically the AuthenticationHelper.js 文件中提供了一个 Cognito Identity 帮助程序库,因为它包含用于计算 SRP 的逻辑。此外,还有一种计算SRP_A的方法,它是调用"initiateAuth"API方法所需的参数。希望这可以帮助您朝着正确的方向前进。
附带说明一下,您可能会注意到 amazon-cognito-identity-js 库依赖于一个大整数库来处理影响准确性的 JavaScript 数字数据类型固有的重要性丢失问题精度。首先,我提到这个是因为我不熟悉这个算术问题是否与 .NET 上下文相关,因为它与 SRP 计算有关。
实际上有一个新的扩展程序 class,可以帮助解决这个问题。只需搜索此 NuGet 包:
AWSSDK.Extensions.CognitoAuthentication
可以找到 GitHub 存储库 here。
可以找到一些示例 here。第一个代码示例向您展示了如何执行 SRP 流。