ConfigurationManager RefreshInterval против AutomaticRefreshInterval - PullRequest
0 голосов
/ 04 августа 2020

Может кто-нибудь объяснить мне разницу между AutomaticRefreshInterval и RefreshInterval, я использую ConfigurationManager в моем OpenIdConnectCachingSecurityTokenProvider, реализующем IIssuerSecurityTokenProvider, по умолчанию AutomaticRefreshInterval установлен на 5 дней, а RefreshInterval - на 30 секунд, между ними я не могу найти четкое объяснение два значения, цель состоит в том, чтобы предотвратить частый повторный запрос метаданных и запрашивать их только через 1 час, например, нормально ли конфигурация по умолчанию или мне нужно изменить RefreshInterval

My OpenIdConnectCachingSecuritytokenProvider class

 public class OpenIdConnectCachingSecurityTokenProvider : IIssuerSecurityTokenProvider
{
    public ConfigurationManager<OpenIdConnectConfiguration> _configManager;
    private string _issuer;
    private IEnumerable<SecurityToken> _tokens;
    private readonly string _metadataEndpoint;

    private readonly ReaderWriterLockSlim _synclock = new ReaderWriterLockSlim();

    public OpenIdConnectCachingSecurityTokenProvider(string metadataEndpoint)
    {
        _metadataEndpoint = metadataEndpoint;
        _configManager = new ConfigurationManager<OpenIdConnectConfiguration>(metadataEndpoint);
        //_configManager.RefreshInterval = new TimeSpan(0,1,0);
        //_configManager.AutomaticRefreshInterval
        RetrieveMetadata();
    }

    /// <summary>
    /// Gets the issuer the credentials are for.
    /// </summary>
    /// <value>
    /// The issuer the credentials are for.
    /// </value>
    public string Issuer
    {
        get
        {
            RetrieveMetadata();
            _synclock.EnterReadLock();
            try
            {
                return _issuer;
            }
            finally
            {
                _synclock.ExitReadLock();
            }
        }
    }

    /// <summary>
    /// Gets all known security tokens.
    /// </summary>
    /// <value>
    /// All known security tokens.
    /// </value>
    public IEnumerable<SecurityToken> SecurityTokens
    {
        get
        {
            RetrieveMetadata();
            _synclock.EnterReadLock();
            try
            {
                return _tokens;
            }
            finally
            {
                _synclock.ExitReadLock();
            }
        }
    }

    private void RetrieveMetadata()
    {
        _synclock.EnterWriteLock();
        try
        {
            OpenIdConnectConfiguration config = Task.Run(_configManager.GetConfigurationAsync).Result;
            _issuer = config.Issuer;
            _tokens = config.SigningTokens;
        }
        finally
        {
            _synclock.ExitWriteLock();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...