Browse Source

user login single

xf 1 year ago
parent
commit
e7ac651c50

+ 1 - 1
src/Hotline.Api/Program.cs

@@ -30,7 +30,7 @@ try
         .UseSerilog((ctx, lc) => lc
         //.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}")
         .Enrich.FromLogContext()
-        .ReadFrom.Configuration(ctx.Configuration))
+        .ReadFrom.Configuration(ctx.Configuration), true)
         ;
 
     builder

+ 13 - 11
src/Hotline.Api/StartupHelper.cs

@@ -28,8 +28,6 @@ namespace Hotline.Api
         /// <returns></returns>
         public static IServiceCollection RegisterAuthentication(this IServiceCollection services, ConfigurationManager configuration)
         {
-            //using var serviceProvider = services.BuildServiceProvider();
-            //var cacheAudience = serviceProvider.GetService<ITypedCache<AudienceTicket>>();
             var jwtOptions = configuration.GetSection("IdentityConfiguration").Get<IdentityConfiguration>().Jwt;
 
             #region remote ids
@@ -74,18 +72,22 @@ namespace Hotline.Api
                     d.TokenValidationParameters = new()
                     {
                         ValidateIssuer = false,
-                        ValidateAudience = false,
+                        ValidateAudience = true,
                         ValidateLifetime = true,
                         ValidateIssuerSigningKey = true,
                         IssuerSigningKey = secKey,
-                        //AudienceValidator = (audiences, token, parameters) =>
-                        //{
-                        //    using var serviceProvider = services.BuildServiceProvider();
-                        //    var a = serviceProvider.GetService<IOrderApplication>();
-                        //    var cacheAudience = serviceProvider.GetService<ITypedCache<AudienceTicket>>();
-                        //    var audience = cacheAudience.Get(token.Id);
-                        //    return audiences != null && audiences.Any(a => a == audience?.Ticket);
-                        //}
+                        AudienceValidator = (audiences, token, parameters) =>
+                        {
+                            if (token is JwtSecurityToken jwtToken)
+                            {
+                                using var serviceProvider = services.BuildServiceProvider();
+                                var cacheAudience = serviceProvider.GetService<ITypedCache<AudienceTicket>>();
+                                var audience = cacheAudience.Get(jwtToken.Subject);
+                                return audiences != null && audiences.Any(a => a == audience?.Ticket);
+                            }
+
+                            return false;
+                        }
                     };
 
                     //d.Audience = "hotline_api";

+ 1 - 1
src/Hotline.Application/Identity/IdentityAppService.cs

@@ -93,7 +93,7 @@ public class IdentityAppService : IIdentityAppService, IScopeDependency
         var jwtOptions = _identityOptionsAccessor.Value.Jwt;
         var claims = new List<Claim>
         {
-            new(JwtClaimTypes.Id, account.Id),
+            //new(JwtClaimTypes.Id, account.Id),
             new(JwtClaimTypes.Subject, account.Id),
             new(JwtClaimTypes.PhoneNumber, account.PhoneNo ?? string.Empty),
             new(AppClaimTypes.UserDisplayName, account.Name),