Как обновляются токены JWT в cookie? - PullRequest
0 голосов
/ 07 сентября 2018

Представьте себе сценарий, в котором каждый раз, когда вам нужен доступ к определенной части службы (которую можно получить с помощью методов REST API; например, получить доступ и обновить токены), вы записываете эти токены в токены JWT и обновляете файлы cookie в своем браузере, чтобы вы могли может получить доступ к этим токенам с AbpSession.

private string CreateAccessToken(IEnumerable<Claim> claims, TimeSpan? expiration = null)
{
    var now = DateTime.UtcNow;

    var jwtSecurityToken = new JwtSecurityToken(
        issuer: _configuration.Issuer,
        audience: _configuration.Audience,
        claims: claims,
        notBefore: now,
        expires: now.Add(expiration ?? _configuration.Expiration),
        signingCredentials: _configuration.SigningCredentials
    );

    return new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
}

При создании токена JWT вы получаете AuthenticateResultModel в методе Authenticate, который вызывается при входе пользователя в систему.

public async Task<AuthenticateResultModel> Authenticate([FromBody] AuthenticateModel model)
{
    // ...

    return new AuthenticateResultModel
    {
        AccessToken = accessToken,
        EncryptedAccessToken = GetEncrpyedAccessToken(accessToken),
        ExpireInSeconds = (int)_configuration.Expiration.TotalSeconds,
        UserId = (long)AbpSession.UserId
    };
}

В случае успеха вызывается метод login.

private login(accessToken: string, encryptedAccessToken: string, expireInSeconds: number, rememberMe?: boolean): void {

    var tokenExpireDate = rememberMe ? (new Date(new Date().getTime() + 1000 * expireInSeconds)) : undefined;

    this._tokenService.setToken(
        accessToken,
        tokenExpireDate
    );

    this._utilsService.setCookieValue(
        AppConsts.authorization.encrptedAuthTokenName,
        encryptedAccessToken,
        tokenExpireDate,
        abp.appPath
    ); 
}

Насколько я понимаю, в CreateAccessToken вы сериализуете токен JWT и устанавливаете значения cookie в вашем браузере с помощью функции login.

Теперь, что мне интересно, когда я создаю другой токен и устанавливаю значения cookie, я перезаписываю предыдущий токен? Или предыдущий токен удален? Я не могу найти никакой информации по этой теме, и причина, по которой я спрашиваю, состоит в том, что я буду много раз обновлять этот токен в течение срока службы приложения, и я беспокоюсь о влиянии памяти и памяти.

1 Ответ

0 голосов
/ 07 октября 2018

когда я создаю другой токен и устанавливаю значения cookie, я перезаписываю предыдущий токен? Или предыдущий токен удален?

Предыдущий токен перезаписывается в setCookieValue:

abp.utils.setCookieValue = function (key, value, expireDate, path, domain) {
    var cookieValue = encodeURIComponent(key) + '=';

    if (value) {
        cookieValue = cookieValue + encodeURIComponent(value);
    }

    // ...

    document.cookie = cookieValue;
};
...