国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend)

這篇具有很好參考價值的文章主要介紹了【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.打造網(wǎng)關(guān)

1.1 簡介

BFF(Backend For Frontend)負(fù)責(zé)認(rèn)證授權(quán),服務(wù)聚合,目標(biāo)是為前端提供服務(wù)。BFF是在前后端分離架構(gòu)出來后才出現(xiàn)的,為前端提供單純的API樣式的網(wǎng)關(guān)。

在微服務(wù)架構(gòu)中網(wǎng)關(guān)和BFF的區(qū)別實際不大,二者之間的職責(zé)可以是重疊,聚合的,本質(zhì)來講BFF模式是網(wǎng)關(guān)職責(zé)的一種進(jìn)化。

1.2 連接模式

【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend),微服務(wù),NetCore,微服務(wù),架構(gòu),.netcore,后端,開發(fā)語言

傳統(tǒng)的連接模式

【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend),微服務(wù),NetCore,微服務(wù),架構(gòu),.netcore,后端,開發(fā)語言

共享網(wǎng)關(guān)模式的好處是統(tǒng)一的入口,所有的應(yīng)用程序通過單一的網(wǎng)關(guān)進(jìn)行請求,適合網(wǎng)關(guān)比較強(qiáng)大并且所有接口都在網(wǎng)關(guān)上注冊,要求網(wǎng)關(guān)的可用性比較高。

【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend),微服務(wù),NetCore,微服務(wù),架構(gòu),.netcore,后端,開發(fā)語言

隨著業(yè)務(wù)的發(fā)展,單個服務(wù)并不能滿足要求,很可能需求是需要跨微服務(wù)之間進(jìn)行組裝數(shù)據(jù),這時候就出現(xiàn)了聚合服務(wù)。聚合服務(wù)可以單獨作為一個服務(wù)存在微服務(wù)的體系下,也是通過網(wǎng)關(guān)去訪問它,實際上聚合服務(wù)也可以設(shè)計在網(wǎng)關(guān)中,這樣的網(wǎng)關(guān)實際上就類似于BFF。

【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend),微服務(wù),NetCore,微服務(wù),架構(gòu),.netcore,后端,開發(fā)語言

專用網(wǎng)關(guān)模式指的是針對不同的客戶端采用不用的網(wǎng)關(guān),比如將移動端和PC的網(wǎng)關(guān)分開。這樣的好處在于,不同的客戶端所依賴的網(wǎng)關(guān)是不同的,可以使故障隔離,不用端之間是不會收到相互之間的影響;同時也可以為不同端設(shè)計不同的數(shù)據(jù)聚合接口,暴露不同的微服務(wù)Api。不同業(yè)務(wù)線之間只要維護(hù)自己的網(wǎng)關(guān),同時根據(jù)自身業(yè)務(wù)線去進(jìn)行業(yè)務(wù)的拆分

1.3 打造網(wǎng)關(guān)

  • 添加包Ocelot 14.0.3
  • 添加配置文件ocelot.json
  • 添加配置讀取代碼
  • 注冊O(shè)celot服務(wù)
  • 注冊O(shè)ceot中間件
// startup

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }
        
public void ConfigureServices(IServiceCollection services)
{
	services.AddOcelot(Configuration);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	... 
	 app.UseOcelot().Wait(); // 放最后是為了讓網(wǎng)關(guān)內(nèi)置的 Api仍然生效
}

2.身份認(rèn)證與授權(quán)

2.1 身份認(rèn)證方案

  • Cookie
  • JWT Bearer
2.1.1 JWT是什么
  • 全程 Json Web Tokens
  • 支持簽名的數(shù)據(jù)結(jié)構(gòu)

【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend),微服務(wù),NetCore,微服務(wù),架構(gòu),.netcore,后端,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-679943.html

2.1.2 啟用JwtBearer身份認(rèn)證
  • Microsoft.AspNetCore.Authentication.JwtBearer
2.1.3 配置身份認(rèn)證
  • Ocelot網(wǎng)關(guān)配置身份認(rèn)證
  • 微服務(wù)配置認(rèn)證與授權(quán)
// appsetting.json配置秘鑰
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "SecurityKey": "aabbccddffskldjfklajskdlfjlas234234234"
}

// startup 配置
 var secrityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["SecurityKey"]));
  services.AddSingleton(secrityKey);
  services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
       .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
       {
           
       })
       .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
       {
           options.TokenValidationParameters = new TokenValidationParameters
           {
               ValidateIssuer = true,//是否驗證Issuer
               ValidateAudience = true,//是否驗證Audience
               ValidateLifetime = true,//是否驗證失效時間
               ClockSkew = TimeSpan.FromSeconds(30),
               ValidateIssuerSigningKey = true,//是否驗證SecurityKey
               ValidAudience = "localhost",//Audience
               ValidIssuer = "localhost",//Issuer
               IssuerSigningKey = secrityKey//拿到SecurityKey
           };
       });

// 注冊
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	...
	// 這兩個需要注冊在UseEndpoints之前
	app.UseAuthentication();
    app.UseAuthorization();

	app.UseEndpoints(endpoints =>
     {
           endpoints.MapHealthChecks("/live");
           endpoints.MapHealthChecks("/ready");
           endpoints.MapHealthChecks("/hc", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
           {
               ResponseWriter = HealthChecks.UI.Client.UIResponseWriter.WriteHealthCheckUIResponse
           });
           endpoints.MapControllers();

           endpoints.MapDefaultControllerRoute();
       });
       
       app.UseOcelot().Wait();
}

2.1.4 JWT注意事項
  • Payload信息不宜過大
  • Payload不宜存儲敏感信息

到了這里,關(guān)于【微服務(wù)】05-網(wǎng)關(guān)與BFF(Backend For Frontend)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包