You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3应用如何获取AccessToken/Session配置AWS Cognito MFA

解决方案

当SRP登录流程返回MFA_SETUP挑战时,认证流程尚未完成,此时不会返回正式的AccessToken,你不需要额外寻找AccessToken,直接使用当前挑战响应携带的临时Session字符串即可完成AssociateSoftwareToken接口的授权。

具体实现逻辑

  • 在authFlowResponse.ChallengeName == ChallengeNameType.MFA_SETUP分支中,直接读取authFlowResponse.Session属性值,该值是Cognito为当前未完成的认证流程颁发的临时授权凭证,完全满足MFA配置环节的接口鉴权要求
  • 调用AssociateSoftwareToken接口时,仅传入Session参数即可,禁止同时给AccessToken和Session赋值,两个参数同时传入会触发接口参数校验错误
  • 拿到接口返回的TOTP密钥后,生成对应二维码或手动输入码提供给用户绑定身份验证器应用
  • 用户绑定后输入验证码时,调用VerifySoftwareToken接口同样传入该Session值+用户输入的6位验证码,验证通过后接口会返回正式的AccessToken、RefreshToken、IdToken,后续业务接口调用再使用该正式AccessToken即可

代码修改示例

登录逻辑调整

if (authFlowResponse.AuthenticationResult is null)
{  
    if (authFlowResponse.ChallengeName == ChallengeNameType.MFA_SETUP)
    {
        // 直接从挑战响应中取临时Session
        string mfaSetupSession = authFlowResponse.Session;
        // 传入Session调用MFA配置方法
        var mfaSetupResult = await CognitoSetUpTOTPMFAAsync(sessionString: mfaSetupSession);
    }
    // 其余原有逻辑保持不变
}

MFA配置方法调整

try
{
    AmazonCognitoIdentityProviderClient provider = new(new AnonymousAWSCredentials(), FallbackRegionFactory.GetRegionEndpoint());
    AssociateSoftwareTokenRequest associateSoftwareTokenRequest = new()
    {
        // MFA设置挑战阶段仅传Session,不需要传AccessToken
        Session = sessionString               
    };
    AssociateSoftwareTokenResponse associateSoftwareTokenResponse = await provider.AssociateSoftwareTokenAsync(associateSoftwareTokenRequest);
    // 其余原有逻辑保持不变
    return ...
}
catch (Exception)
{
    return ...
}

注意:只有当整个认证流程完全走完、拿到正式AccessToken后,后续用户重新绑定MFA等非挑战场景下的AssociateSoftwareToken调用,才需要传入AccessToken作为授权凭证。

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:54:20