Bem-vindo ao Microsoft Q&A!
Vamos por partes para abordar suas dúvidas:
Blazor WASM vs Blazor Server
Blazor WebAssembly (WASM) executa a aplicação no navegador, proporcionando uma experiência mais rápida e offline, mas pode ter um tempo de carregamento inicial maiorBlazor Server, por outro lado, executa a aplicação no servidor e envia atualizações para o cliente via SignalR, resultando em um tempo de carregamento inicial mais rápido e menor uso de recursos no cliente.
Consumo da API por Programa Externo
Sim, é conveniente e eficiente que o program/en-us/aspnet/core/blazor/hosting-moda externo consuma a mesma API que o Blazor Client. Isso promove a reutilização de código e facilita a manutenção.
JWT para Blazor Cliente e Programa Externo
É possível criar JWTs separados para o Blazor Client e para o programa externo. Você pode configurar diferentes políticas de autenticação e autorização no ASP.NET Core para gerenciar isso. Aqui está um exemplo básico de como configurar JWTs:
- Configuração do JWT no
Startup.cs
: C#public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; }); services.AddAuthorization(options => { options.AddPolicy("BlazorClientPolicy", policy => policy.RequireClaim("Client", "Blazor")); options.AddPolicy("ExternalProgramPolicy", policy => policy.RequireClaim("Client", "ExternalProgram")); }); services.AddControllers(); }
- Gerar Tokens Diferentes:
public string GenerateToken(string clientType) { var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, "user"), new Claim("Client", clientType) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken( issuer: Configuration["Jwt:Issuer"], audience: Configuration["Jwt:Audience"], claims: claims, expires: DateTime.Now.AddMinutes(30), signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); }
Multi-Tenant
Para uma aplicação multi-tenant, você pode usar o Entity Framework Core junto com ASP.NET Core. Isso permite que você isole os dados de cada tenant enquanto compartilha a mesma infraestrutura.
Melhor Stack de Tecnologias
Considerando suas necessidades:
- Blazor WebAssembly para uma experiência de usuário mais rica e offline.
- ASP.NET Core para o backend, expondo APIs que podem ser consumidas tanto pelo Blazor Client quanto pelo programa externo.
- Entity Framework Core para gerenciar dados multi-tenant.
Espero que essas dicas ajudem a resolver o problema! Se precisar de mais assistência, estou à disposição.
Saudações
Jonathan.
-----------
Se você acha que as informações fornecidas acima resolveram sua dúvida, agradeceríamos se você pudesse marcá-la como "Aceite a resposta se achar útil". Isso nos ajuda a manter a qualidade e a relevância das soluções em nosso fórum.