dotnet-dynamic-jwt-bearer/PoweredSoft.DynamicJwtBearer.DynamicAuthority/DynamicAuthorityJwtBearerHandlerConfigurationResolver.cs

38 lines
1.8 KiB
C#
Raw Permalink Normal View History

2020-07-23 13:10:32 -04:00
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.IdentityModel.Protocols;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace PoweredSoft.DynamicJwtBearer.DynamicAuthority
{
public class DynamicAuthorityJwtBearerHandlerConfigurationResolver : IDynamicJwtBearerHanderConfigurationResolver
{
private readonly IMemoryCache memoryCache;
private readonly IDynamicJwtBearerAuthorityResolver dynamicJwtAuthorityResolver;
public DynamicAuthorityJwtBearerHandlerConfigurationResolver(IMemoryCache memoryCache, IDynamicJwtBearerAuthorityResolver dynamicJwtAuthorityResolver)
{
this.memoryCache = memoryCache;
this.dynamicJwtAuthorityResolver = dynamicJwtAuthorityResolver;
}
public async Task<OpenIdConnectConfiguration> ResolveCurrentOpenIdConfiguration(HttpContext context)
{
var authority = await dynamicJwtAuthorityResolver.ResolveAuthority(context);
var cacheKey = $"DynamicAuthorityJwtBearerHandlerConfigurationResolver__{authority}";
var ret = await memoryCache.GetOrCreateAsync(cacheKey, async cacheEntry =>
{
cacheEntry.AbsoluteExpirationRelativeToNow = dynamicJwtAuthorityResolver.ExpirationOfConfiguration;
var configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>($"{authority}/.well-known/openid-configuration", new OpenIdConnectConfigurationRetriever());
var authorityConfiguration = await configurationManager.GetConfigurationAsync(context.RequestAborted);
return authorityConfiguration;
});
return ret;
}
}
}