Novo Projeto - dúvida na tecnologia a ser utilizada

Gilcecler Carneiro 25 Pontos de reputação
2024-09-12T17:21:24.13+00:00

Um novo projeto blazor wasm e blazer server app . Minha dúvida é que no server dois models ou dois entities precisam ser atualizados por um programa de terceiros, externo a minha aplicação, que consumiria minha api.

o server já expoe a API que o blazer client vai consumir é conveniente consumir esta mesma API com este programa externo ?

É possível criar um Jwt para o blazor cliente e outro para o consumo do programa externo ?

Esta aplicação tem que ser multi-tenant também.

Estou na dúvida qual seria a melhor stack de tecnologias.

ASP.NET
ASP.NET
Um conjunto de tecnologias no .NET Framework para criar aplicativos Web e serviços Web XML.
8 perguntas
0 comentários Sem comentários
{count} votos

Resposta aceita
  1. Jonathan Pereira Castillo 8,160 Pontos de reputação Fornecedor da Microsoft
    2024-09-12T18:08:00.9033333+00:00

    Oi Gilcecler Carneiro!

    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:

    1. 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();
         }
         
      
    2. 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.

    1 pessoa achou esta resposta útil.
    0 comentários Sem comentários

5 respostas adicionais

Classificar por: Mais útil
  1. Gilcecler Carneiro 25 Pontos de reputação
    2024-09-12T19:27:28.0666667+00:00

    ótimo. sua resposta esclareceu muito, porém abriu mais uma dúvida:
    melhor criar solution individual para Blazor WebAssembly e ASP.NET core, como era até o net7 ou utilizar do NET8 o novo BlazorWebApp com modo automático.

    1 pessoa achou esta resposta útil.
    0 comentários Sem comentários

  2. Jonathan Pereira Castillo 8,160 Pontos de reputação Fornecedor da Microsoft
    2024-09-12T21:03:24.06+00:00

    Oi Gilcecler Carneiro

    Fico feliz que minha resposta tenha ajudado! Vamos à sua nova dúvida.

    Blazor WebAssembly e ASP.NET Core em Soluções Individuais vs. BlazorWebApp no .NET 8

    Soluções Individuais (Blazor WebAssembly e ASP.NET Core)

    • Separação de Responsabilidades: Manter Blazor WebAssembly e ASP.NET Core em soluções separadas pode ajudar a manter uma clara separação de responsabilidades entre o frontend e o backend.
    • Flexibilidade: Permite maior flexibilidade na escolha de tecnologias e ferramentas específicas para cada parte da aplicação.
    • Manutenção: Pode ser mais fácil de manter e escalar cada parte da aplicação independentemente.

    BlazorWebApp no .NET 8 com Modo Automático

    • Simplificação: O novo BlazorWebApp no .NET 8 simplifica a configuração e o desenvolvimento, permitindo que você use um único projeto para gerenciar tanto o frontend quanto o backend.
    • Renderização Automática: O modo automático ajusta dinamicamente o método de renderização (WebAssembly ou Server) com base nas necessidades da aplicaçãocessidades da aplicação.
    • Desempenho: Pode melhorar o desempenho inicial da aplicação, pois utiliza renderização estática por padrão e ativa a interatividade conforme necessário.

    Considerações

    • Complexidade do Projeto: Se o seu projeto é complexo e requer uma clara separação entre frontend e backend, manter soluções individuais pode ser mais adequado.
    • Facilidade de Desenvolvimento: Se você busca simplificar o desenvolvimento e aproveitar as novas funcionalidades do .NET 8, o BlazorWebApp com modo automático pode ser uma excelente escolha.
    • Escalabilidade: Avalie como cada abordagem impacta a escalabilidade e a manutenção a longo prazo.

    Recomendações

    Para projetos novos, especialmente se você deseja aproveitar as últimas inovações do .NET 8, experimentar o BlazorWebApp com modo automático pode ser vantajoso. No entanto, para projetos existentes ou muito complexos, manter a estrutura tradicional com soluções individuais pode oferecer mais controle e flexibilidade.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.

    1 pessoa achou esta resposta útil.
    0 comentários Sem comentários

  3. Jonathan Pereira Castillo 8,160 Pontos de reputação Fornecedor da Microsoft
    2024-10-24T18:37:42.58+00:00

    Oi Gilcecler Carneiro,

    O objetivo desta mensagem é verificar as informações fornecidas. Se tiver mais atualizações sobre este assunto, por favor, não hesite em responder neste mesmo tópico.

    Cuidadosamente                 

    Jonathan

    -----------

    Sua opinião é muito importante para nós! Se esta resposta resolveu sua consulta, por favor clique em ‘YES‘. Isso nos ajuda a melhorar continuamente a qualidade e relevância de nossas soluções. Obrigado pela sua colaboração!

    1 pessoa achou esta resposta útil.
    0 comentários Sem comentários

  4. Jonathan Pereira Castillo 8,160 Pontos de reputação Fornecedor da Microsoft
    2024-09-19T15:45:03.34+00:00

    Gilcecler Carneiro

    Fico feliz que minha resposta tenha ajudado! Sobre sua nova dúvida, aqui estão algumas considerações:

    Blazor WebAssembly e ASP.NET Core Separados (até .NET 7)

    • Flexibilidade: Permite maior controle sobre cada parte do projeto, podendo otimizar individualmente o front-end (Blazor WebAssembly) e o back-end (ASP.NET Core).
    • Desempenho: Pode ser mais eficiente em termos de desempenho, pois cada parte pode ser ajustada separadamente para melhor performance.
    • Complexidade: Requer mais configuração e manutenção, pois você precisa gerenciar dois projetos distintos.

    BlazorWebApp com Modo Automático (.NET 8)

    Considerações Finais

    • Projeto Pequeno/Médio: Se você está trabalhando em um projeto pequeno ou médio, o BlazorWebApp com modo automático pode simplificar bastante o desenvolvimento e manutenção.
    • Projeto Grande/Complexo: Para projetos maiores ou que requerem otimizações específicas, manter soluções separadas pode ser mais vantajoso.

    Qualquer que seja a escolha, ambas as abordagens têm seus méritos. Dependerá muito das necessidades específicas do seu projeto e da sua equipe.

    Atenciosamente,

    Jonathan

    -----------

    Sua opinião é muito importante para nós! Se esta resposta resolveu sua consulta, por favor clique em ‘Sim’. Isso nos ajuda a melhorar continuamente a qualidade e relevância de nossas soluções. Obrigado pela sua colaboração!

    0 comentários Sem comentários

Sua resposta

As respostas podem ser marcadas como Respostas Aceitas pelo autor da pergunta, o que ajuda os usuários a saber a resposta que resolveu o problema do autor.