added default authorize

master
Young 7 months ago
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;
}
}

@ -7,7 +7,7 @@ namespace Infrastructure.Extensions;
public static class RedisSetup
{
public static IServiceCollection AddRedisSetup(this IServiceCollection services, IConfiguration configuration)
public static IServiceCollection AddDefaultRedis(this IServiceCollection services, IConfiguration configuration)
{
ArgumentNullException.ThrowIfNull(services);
ArgumentNullException.ThrowIfNull(configuration);

@ -11,4 +11,8 @@ public sealed class AudienceOptions : OptionsBase
public string Secret { get; set; }
public int Expiration { get; set; }
public string? Policy { get; set; }
public string[]? Roles { get; set; }
}

@ -6,15 +6,15 @@ public sealed class SqlSugarOptions : OptionsBase
public SnowFlakeOptions? SnowFlake { get; set; }
public string Server { get; set; }
public string? Server { get; set; }
public int? Port { get; set; }
public int Port { get; set; }
public string Database { get; set; }
public string? Database { get; set; }
public string UserId { get; set; }
public string? User { get; set; }
public string Password { get; set; }
public string? Password { get; set; }
}
public class SnowFlakeOptions : OptionsBase

@ -3,6 +3,7 @@ namespace Infrastructure.Options;
public class VersionOptions : OptionsBase
{
public const string Name = "Version";
public string HeaderName { get; set; }
public string ParameterName { get; set; }

@ -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…
Cancel
Save