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