Ejemplo n.º 1
0
        private async Task<KeycloakToken> GetToken()
        {
            var keyToken = "token";

            KeycloakToken resultToken = null;
            var tokenSession = _httpContextAccesor.HttpContext.Session.GetString(keyToken); //ToDo: Cambiar por un sessionTokenManager
            
            if (string.IsNullOrEmpty(tokenSession))
            {
                resultToken = await _keycloakClient.GetToken(_options.ClientId, _options.ClientSecret);                
            }
            else
            {
                resultToken = JsonConvert.DeserializeObject<KeycloakToken>(tokenSession);

                if (_options.EnableRefreshToken)
                {
                    var unixTime = new DateTimeOffset(DateTime.Now);
                    var jwt = new JwtSecurityToken(resultToken.AccessToken);

                    if (jwt.Payload.Exp.HasValue && unixTime.ToUnixTimeSeconds() > jwt.Payload.Exp.Value)
                    {
                        resultToken = await _keycloakClient.GetToken(_options.ClientId, _options.ClientSecret, resultToken.RefreshToken);
                    } 
                }
            }

            _httpContextAccesor.HttpContext.Session.SetString(keyToken, JsonConvert.SerializeObject(resultToken));

            return resultToken;
        }