AWS Cognito:注册/登录后如何在 .Net 中发出身份验证请求

Posted

技术标签:

【中文标题】AWS Cognito:注册/登录后如何在 .Net 中发出身份验证请求【英文标题】:AWS Cogntio: How to make authentication request in .Net after SignUp/SignIn 【发布时间】:2018-10-07 23:37:24 【问题描述】:

使用适用于 .Net 的 AWS 开发工具包,我可以使用

在 UserPool 中注册用户
AmazonCognitoIdentityProviderClient provider = new AmazonCognitoIdentityProviderClient(new Amazon.Runtime.AnonymousAWSCredentials(), RegionEndpoint.USEast1);
SignUpRequest signUpRequest = new SignUpRequest()
        
            ClientId = CLIENTAPP_ID,
            Password = user.Password,
            Username = user.Username
        ;

await provider.SignUpAsync(signUpRequest);

注册后,我想验证用户身份并登录并重定向到某个授权页面。使用以下代码我可以获得 Auth Token

CognitoUserPool userPool = new CognitoUserPool(this.POOL_ID, this.CLIENTAPP_ID, provider);
CognitoUser user = new CognitoUser(username, this.CLIENTAPP_ID, userPool, provider);

InitiateSrpAuthRequest authRequest = new InitiateSrpAuthRequest()
  
    Password = password
  ;

AuthFlowResponse authResponse = await user.StartWithSrpAuthAsync(authRequest).ConfigureAwait(false);
 if (authResponse.AuthenticationResult != null)
 
  // Here i can see authResponse.AuthenticationResult.AccessToken

但是现在对于 GetUserAttributes 或 DeleteUser 的任何下一个请求,我如何使用返回的用户令牌? 我看到有 userPool.getCurrentUser(); 但这在 .Net SDK 中不可用,我认为它在 JS SDK 中。

那么,我如何在注册/登录后发出经过身份验证的请求,以使用 .Net SDK 或使用 REST Api 调用来执行各种其他操作,例如 UpdateAttributes 或 DeleteUser 等

请推荐

【问题讨论】:

【参考方案1】:

StartWithSrpAuthAsync调用成功返回后,可以使用user对象,调用GetCognitoAWSCredentials

CognitoAWSCredentials credentials =
    user.GetCognitoAWSCredentials("identityPoolID", RegionEndpoint.<Your_Identity_Pool_Region>);

然后使用这些凭据:

// examples
await user.UpdateAttributesAsync(...);
await user.DeleteUserAsync();

new AmazonLambdaClient(credentials, AuthenticationManager.Region);
new AmazonS3Client(credentials);

您也可以拨打电话获取用户:

string accessToken = authResponse.AuthenticationResult.AccessToken;

Task<GetUserResponse> responseTask =
    provider.GetUserAsync(new GetUserRequest
    
        AccessToken = accessToken
    );

GetUserResponse responseObject = await responseTask;

一些参考资料:

https://aws.amazon.com/blogs/developer/cognitoauthentication-extension-library-developer-preview/ https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-authentication-extension.html#more-authentication-options 在页面内搜索GetCognitoAWSCredentials

【讨论】:

以上是关于AWS Cognito:注册/登录后如何在 .Net 中发出身份验证请求的主要内容,如果未能解决你的问题,请参考以下文章

如何从通过 Google/Federated Login 登录的 AWS Cognito 检索 id 令牌

AWS Cognito 登录 iOS (swift)

将Cognito的用户信息与AWS Amplify GraphQL关联起来。

Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?

AWS Cognito 用户名/电子邮件登录名区分大小写

将 Cognito 中的用户信息与 AWS Amplify GraphQL 关联