Program.cs 4.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using HTEXScreen.Service;
  2. using HTEXScreen.Service.AzureRedis;
  3. using Microsoft.AspNetCore.Authentication.JwtBearer;
  4. using Microsoft.Extensions.Configuration;
  5. using Microsoft.IdentityModel.Tokens;
  6. using System.IdentityModel.Tokens.Jwt;
  7. using System.Text.Json.Nodes;
  8. using TEAMModelOS.SDK.DI;
  9. var builder = WebApplication.CreateBuilder(args);
  10. // Add services to the container.
  11. JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
  12. builder.Services.AddAuthentication(options => options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme)
  13. .AddJwtBearer(options => //AzureADJwtBearer
  14. {
  15. //options.SaveToken = true; //驗證令牌由服務器生成才有效,不適用於服務重啟或分布式架構
  16. options.Authority ="https://login.chinacloudapi.cn/4807e9cf-87b8-4174-aa5b-e76497d7392b/v2.0";// builder.Configuration["Option:Authority"];
  17. options.Audience = "72643704-b2e7-4b26-b881-bd5865e7a7a5";//builder.Configuration["Option:Audience"];
  18. options.RequireHttpsMetadata = true;
  19. options.TokenValidationParameters = new TokenValidationParameters
  20. {
  21. RoleClaimType = "roles",
  22. //ValidAudiences = new string[] { builder.Configuration["Option:Audience"], $"api://{builder.Configuration["Option:Audience"]}" }
  23. ValidAudiences = new string[] { "72643704-b2e7-4b26-b881-bd5865e7a7a5", $"api://72643704-b2e7-4b26-b881-bd5865e7a7a5" }
  24. };
  25. options.Events = new JwtBearerEvents();
  26. //下列事件有需要紀錄則打開
  27. //options.Events.OnMessageReceived = async context => { await Task.FromResult(0); };
  28. //options.Events.OnForbidden = async context => { await Task.FromResult(0); };
  29. //options.Events.OnChallenge = async context => { await Task.FromResult(0); };
  30. //options.Events.OnAuthenticationFailed = async context => { await Task.FromResult(0); };
  31. options.Events.OnTokenValidated = async context =>
  32. {
  33. if (!context.Principal.Claims.Any(x => x.Type.Equals("http://schemas.microsoft.com/identity/claims/scope")) //ClaimConstants.Scope
  34. && !context.Principal.Claims.Any(y => y.Type.Equals("roles"))) //ClaimConstants.Roles //http://schemas.microsoft.com/ws/2008/06/identity/claims/role
  35. {
  36. //TODO 需處理額外授權非角色及範圍的訪問異常紀錄
  37. throw new UnauthorizedAccessException("Neither scope or roles claim was found in the bearer token.");
  38. }
  39. await Task.FromResult(0);
  40. };
  41. });
  42. builder.Services.AddControllers();
  43. #if DEBUG
  44. builder.WebHost.UseUrls(new[] { "https://*:7298" });
  45. #endif
  46. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  47. builder.Services.AddEndpointsApiExplorer();
  48. //builder.Services.AddSwaggerGen();
  49. builder.Services.AddHttpClient();
  50. string StorageConnectionString = builder.Configuration.GetValue<string>("Azure:Storage:ConnectionString");
  51. string StorageConnectionStringTest = builder.Configuration.GetValue<string>("Azure:Storage:ConnectionString-Test");
  52. string ServiceBusConnectionString = builder.Configuration.GetValue<string>("Azure:ServiceBus:ConnectionString");
  53. string ServiceBusConnectionStringTest = builder.Configuration.GetValue<string>("Azure:ServiceBus:ConnectionString-Test");
  54. string RedisConnectionString = builder.Configuration.GetValue<string>("Azure:Redis:ConnectionString");
  55. string RedisConnectionStringTest = builder.Configuration.GetValue<string>("Azure:Redis:ConnectionString-Test");
  56. string CosmosConnectionString = builder.Configuration.GetValue<string>("Azure:Cosmos:ConnectionString");
  57. string CosmosConnectionStringTest = builder.Configuration.GetValue<string>("Azure:Cosmos:ConnectionString-Test");
  58. //Storage
  59. builder.Services.AddAzureStorage(StorageConnectionString, "Default");
  60. builder.Services.AddAzureStorage(StorageConnectionStringTest, "Test");
  61. //ServiceBus
  62. builder.Services.AddAzureServiceBus(ServiceBusConnectionString, "Default");
  63. builder.Services.AddAzureServiceBus(ServiceBusConnectionStringTest, "Test");
  64. //Redis
  65. builder.Services.AddAzureRedis(RedisConnectionString, "Default");
  66. builder.Services.AddAzureRedis(RedisConnectionStringTest, "Test");
  67. //Cosmos
  68. builder.Services.AddAzureCosmos(CosmosConnectionString, "Default");
  69. builder.Services.AddAzureCosmos(CosmosConnectionStringTest, "Test");
  70. builder.Services.AddHostedService<ScreenPDFSub>();
  71. builder.Services.AddHostedService<ScreenPDFSubTest>();
  72. builder.Services.AddHttpContextAccessor();
  73. var app = builder.Build();
  74. if (app.Environment.IsDevelopment())
  75. {
  76. //app.UseSwagger();
  77. //app.UseSwaggerUI();
  78. }
  79. app.UseHttpsRedirection();
  80. app.UseAuthentication();
  81. app.UseAuthorization();
  82. app.MapControllers();
  83. app.Run();