如何使用C#删除AWS Cognito用户池用户?基于aws-cognito-dot-net-desktop-app示例
问题诊断
- API调用完全错误:你调用的
DeleteUserPoolAsync是用于删除整个Cognito用户池的服务端接口,完全不是删除单个用户的接口,同时你将请求参数里的UserPoolId赋值为用户名,参数逻辑完全错误。 - 凭证权限错误:你使用了
AnonymousAWSCredentials匿名凭证调用Cognito管理接口,Cognito不允许匿名身份执行用户删除、用户池删除这类敏感操作,必然会鉴权失败。
修复方案
根据你的使用场景二选一即可:
场景1:当前登录用户主动删除自己的账号
该场景不需要管理员权限,使用用户登录后拿到的访问令牌调用DeleteUserAsync接口即可,示例代码:
internal async Task<bool> DeleteCurrentUser(string accessToken) { try { var provider = new AmazonCognitoIdentityProviderClient(RegionEndpoint.USEast1); var request = new DeleteUserRequest { AccessToken = accessToken }; await provider.DeleteUserAsync(request); return true; } catch (Exception ex) { Console.WriteLine(ex); return false; } }
场景2:管理员侧删除指定用户
该场景需要使用拥有cognito-idp:AdminDeleteUser权限的IAM凭证,调用AdminDeleteUserAsync接口即可,示例代码:
internal async Task<bool> AdminDeleteUser(string username) { try { // 注意:生产环境禁止硬编码IAM凭证,建议通过IAM角色、密钥管理服务等方式安全获取凭证 var credentials = new Amazon.Runtime.BasicAWSCredentials("你的IAM访问密钥ID", "你的IAM秘密访问密钥"); var provider = new AmazonCognitoIdentityProviderClient(credentials, RegionEndpoint.USEast1); var request = new AdminDeleteUserRequest { // 替换为你自己的Cognito用户池ID,格式通常为 区域_xxxxxx,例us-east-1_abc123 UserPoolId = "你的用户池ID", Username = username }; await provider.AdminDeleteUserAsync(request); return true; } catch (Exception ex) { Console.WriteLine(ex); return false; } }
注意:代码中的
RegionEndpoint.USEast1需要替换为你自己的Cognito用户池实际部署的区域。
内容的提问来源于stack exchange,提问作者Plc Worker
相关产品推荐
相关产品推荐

