parent
1003342da3
commit
3d4a8943de
@ -0,0 +1,41 @@
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using Infrastructure.Options;
|
||||
using Infrastructure.Security;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
namespace Infrastructure.Extensions;
|
||||
|
||||
public static class AuthorizeSetup
|
||||
{
|
||||
public static IServiceCollection AddDefaultAuthorize(this IServiceCollection services, IConfiguration configuration)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(services);
|
||||
ArgumentNullException.ThrowIfNull(configuration);
|
||||
var audienceOptions = configuration.GetSection(AudienceOptions.Name).Get<AudienceOptions>();
|
||||
if (audienceOptions is null || !audienceOptions.IsEnable)
|
||||
{
|
||||
return services;
|
||||
}
|
||||
|
||||
var key = configuration["AUDIENCE_KEY"] ?? audienceOptions.Secret;
|
||||
ArgumentException.ThrowIfNullOrEmpty(key);
|
||||
var buffer = Encoding.UTF8.GetBytes(key);
|
||||
var securityKey = new SymmetricSecurityKey(buffer);
|
||||
var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
|
||||
|
||||
services.AddSingleton(new PermissionOptions(ClaimTypes.Role,
|
||||
audienceOptions.Issuer,
|
||||
audienceOptions.Audience,
|
||||
TimeSpan.FromSeconds(audienceOptions.Expiration),
|
||||
signingCredentials));
|
||||
|
||||
services.AddAuthorizationBuilder()
|
||||
.AddPolicy(audienceOptions.Policy!, policy =>
|
||||
policy.RequireRole(audienceOptions.Roles!)
|
||||
.Build());
|
||||
return services;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
namespace Infrastructure.Security;
|
||||
|
||||
public class PermissionOptions(
|
||||
string claimType,
|
||||
string issuer,
|
||||
string audience,
|
||||
TimeSpan expiration,
|
||||
SigningCredentials credentials)
|
||||
{
|
||||
public string ClaimType { get; } = claimType;
|
||||
|
||||
public string Issuer { get; } = issuer;
|
||||
|
||||
public string Audience { get; } = audience;
|
||||
|
||||
public TimeSpan Expiration { get; } = expiration;
|
||||
|
||||
public SigningCredentials SigningCredentials { get; } = credentials;
|
||||
}
|
Loading…
Reference in new issue