【问题标题】:How to get REFRESH_TOKEN_AUTH request to return RefreshToken如何获取 REFRESH_TOKEN_AUTH 请求以返回 RefreshToken
【发布时间】:2019-03-08 19:33:16
【问题描述】:

我正在使用 Amazon Cognito 登录用户并保存 RefreshToken,这样他们就不必在初始设置后输入密码。我需要能够使用RefreshToken 登录并获得一个新的RefreshToken 以备下次使用。但是,当我调用InitiateAuthAsync 时,它不会返回RefreshToken。

C#:

var refreshReq = new InitiateAuthRequest();
refreshReq.ClientId = _clientId;

refreshReq.AuthFlow = AuthFlowType.REFRESH_TOKEN_AUTH;
refreshReq.AuthParameters.Add("SECRET_HASH", 
    SecretHash(_clientId, _clientSecret, username));
refreshReq.AuthParameters.Add("REFRESH_TOKEN", refreshToken);


var clientResp = cognitoProvider.InitiateAuthAsync(refreshReq).Result;

回复:

{
    "AuthenticationResult": {
        "AccessToken": "<accessToken>",
        "ExpiresIn": 3600,
        "IdToken": "<idToken>",
        "TokenType": "Bearer"
    },
    "ChallengeParameters": {}
}

这是来自使用有效 ResponseToken 登录的响应:

{
    "AuthenticationResult": {
        "AccessToken": "<accessToken>",
        "ExpiresIn": 3600,
        "IdToken": "<idToken>",
        "RefreshToken": "<refreshToken>",
        "TokenType": "Bearer"
    },
    "ChallengeParameters": {}
}

【问题讨论】:

    标签: c#-4.0 amazon-cognito


    【解决方案1】:

    显然这是 AWS Cognito API 中的一个错误。 docs 说 InitiateAuth 应该返回一个更新的 RefreshToken,但它没有。

    【讨论】:

      【解决方案2】:

      刷新令牌是一个长期存在的令牌,返回它没有意义,因为它仍然有效很多天。如果默认的 30 天到期时间不够长,您可以将其增加到最多 3650 天。

      【讨论】:

      • 当然返回一个新的令牌是有道理的! 30 天后(实际上是 28 天,因为 2 月),我的用户不得不重新输入他们的密码,一个月后他们不记得了。不过,我犹豫要不要把它作为答案,因为答案是它已经坏了。
      【解决方案3】:

      刷新令牌仅在初始登录时返回,可多次使用以获取新的访问令牌和id令牌强>。请注意您的用户池配置,因为如果您正在使用设备跟踪并且未确认用于登录的设备,它将无法工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-19
        相关资源
        最近更新 更多