1. 程式人生 > >Swagger如何訪問Ocelot中帶許可權驗證的API

Swagger如何訪問Ocelot中帶許可權驗證的API

先亮原始碼:https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo

這篇博文不是對asp.net core中使用Swagger作介紹,因為社群部落格作了詳細說明。

今天主要說一下Swagger在Ocelot閘道器許可權驗證模式下的訪問,以及Swagger請求應答的資料格式。

首先建立四個專案:

SwaggerOcelot:asp.net core web api型別,api閘道器專案

SwaggerAuthorize:asp.net core web api型別,使用者驗證專案

SwaggerAPI01:asp.net core web api型別,api 1專案

SWaggerAPI02:asp.net core web api型別,api 2專案

再在四個專案Nuget中引入Swashbuckle.AspNetCore,我的Demo中用的是2.5.0,再分別配置Swagger

 SwaggerAuthorize  Starup.cs配置

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddTokenJwtAuthorize();
4 services.AddMvc() 5 .SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 6 services.AddSwaggerGen(options => 7 { 8 options.SwaggerDoc("SwaggerAuthorize", new Info { Title = "Authorize", Version = "v1", Contact = new Contact { Email = "[email protected]
", Name = "Authorize", Url = "http://0.0.0.0" }, Description = "Authorize專案" }); 9 var basePath = PlatformServices.Default.Application.ApplicationBasePath; 10 var xmlPath = Path.Combine(basePath, "SwaggerAuthorize.xml"); 11 options.IncludeXmlComments(xmlPath); 12 }); 13 } 14 public void Configure(IApplicationBuilder app, IHostingEnvironment env) 15 { 16 if (env.IsDevelopment()) 17 { 18 app.UseDeveloperExceptionPage(); 19 } 20 21 app.UseMvc() 22 .UseSwagger(options => 23 { 24 options.RouteTemplate = "{documentName}/swagger.json"; 25 }) 26 .UseSwaggerUI(options => 27 { 28 options.SwaggerEndpoint("/SwaggerAuthorize/swagger.json", "Authorize"); 29 }); 30 }

SwaggerAPI01,SwaggerAPI02類似,Starup.cs配置,其中讓Swagger支付Token驗證,就是要在這部分新增Swagger配置

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddApiJwtAuthorize((context) =>
 4     {
 5         return true;
 6     });
 7  
 8     services.AddSwaggerGen(options =>
 9     {
10         options.SwaggerDoc("SwaggerAPI01", new Info { Title = "API01", Version = "v1", Contact = new Contact { Email = "[email protected]", Name = "API01", Url = "http://0.0.0.0" }, Description = "API01專案" });
11         var basePath = PlatformServices.Default.Application.ApplicationBasePath;
12         var xmlPath = Path.Combine(basePath, "SwaggerAPI01.xml");
13         options.IncludeXmlComments(xmlPath);
14  
15         //這裡是給Swagger新增驗證的部分
16         options.AddSecurityDefinition("Bearer", new ApiKeyScheme { In = "header", Description = "請輸入帶有Bearer的Token", Name = "Authorization", Type = "apiKey" });
17         options.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> {
18             {
19                 "Bearer",
20                 Enumerable.Empty<string>()
21             }
22         });
23     });
24     services
25         .AddMvc()
26         .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
27 }
28  
29 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
30 {
31     app.UseMvc()
32         .UseSwagger(options =>
33         {
34             options.RouteTemplate = "{documentName}/swagger.json";
35         })
36         .UseSwaggerUI(options =>
37         {
38             options.SwaggerEndpoint("/SwaggerAPI01/swagger.json", "API01");
39         });
40 }

SwaggerOcelot,Starup.cs配置

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddOcelotJwtAuthorize();
 4     //注入Ocelot
 5     services.AddOcelot(Configuration);
 6     services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
 7  
 8     services.AddSwaggerGen(options =>
 9     {
10         options.SwaggerDoc("ApiGateway", new Info { Title = "閘道器服務", Version = "v1", Contact = new Contact { Email = "[email protected]", Name = "SwaggerOcelot", Url = "http://10.10.10.10" }, Description = "閘道器平臺" });
11     });
12 }
13  
14 public async void Configure(IApplicationBuilder app, IHostingEnvironment env)
15 {
16     if (env.IsDevelopment())
17     {
18         app.UseDeveloperExceptionPage();
19     }
20  
21     var apis = new Dictionary<string, string>(
22         new KeyValuePair<string, string>[] {
23             KeyValuePair.Create("SwaggerAuthorize", "Authorize"),
24             KeyValuePair.Create("SwaggerAPI01", "API01"),
25             KeyValuePair.Create("SwaggerAPI02", "API02")
26         });
27  
28     app.UseMvc()
29        .UseSwagger()
30        .UseSwaggerUI(options =>
31        {
32            apis.Keys.ToList().ForEach(key =>
33            {
34                options.SwaggerEndpoint($"/{key}/swagger.json", $"{apis[key]} -【{key}】");
35            });
36            options.DocumentTitle = "Swagger測試平臺";
37        });
38     await app.UseOcelot();
39 }

接下來,為Swagger訪問Web API專案,新增請求返回格式,預設狀況下,Swagger是支援Json的,下來新增支援XML格式

第一步,新增支援XML格式

1 services.AddMvc()
2                   .AddXmlSerializerFormatters() //設定支援XML格式輸入輸出
3                   .AddJsonOptions(op => op.SerializerSettings.ContractResolver = new DefaultContractResolver())//大小寫不轉換
4                   .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

第二步,在對應的Action新增ProducesResponseType特性,為轉換作支援

1 [HttpGet("{id}")]
2 [ProducesResponseType(typeof(API01Model), 200)]
3 public ActionResult<API01Model> Get(int id)
4 {
5     return new API01Model { ID = 1, IsSure = true, Price = 2.3m, Describe = "test1" };
6 }

執行效果:

先看登入

再看api訪問

相關推薦

Swagger如何訪問Ocelot許可權驗證API

先亮原始碼:https://github.com/axzxs2001/Asp.NetCoreExperiment/tree/master/Asp.NetCoreExperiment/SwaggerDemo 這篇博文不是對asp.net core中使用Swagger作介紹,因為社群部落格作了詳細說明。 今天

EXCHANGE客戶端訪問服務器(CAS)的身份驗證方式

傳輸 郵箱服務器角色 找到 輸入 驗證 管理器 orm 虛擬 code 在部署完畢exchange後系統會自動建立IIS服務來響應相應的請求。客戶端訪問服務器(以下簡稱CAS)實質上是一臺IIS服務器,在服務器中部署一套名為“Default web site”的站點來完成O

nginx url中文不能訪問

title: nginx url中帶中文不能訪問 date: 2017-12-18 16:29:00 categories: - Android tags: - nginx - shell - 前端 解決nginx 部署,url中帶中文不能訪問 利用rz命令上傳w

MySql skip-grant-tables(跳過許可權驗證的問題)

我們安裝MySql 設定my.ini配置檔案的時候,常常會新增 skip-grant-tables #跳過資料庫許可權驗證 這常常導致一個現象,本地連線資料庫可以使用任意賬號或者密碼。 但是去掉之後,又常常會出現ERROR 1045等問題。 這是可能是因為資料庫中使用者

解決mavenservlet-api.jar和容器自的servlet-api.jar的依賴衝突

在學習maven時,給maven新增tomcat7-maven-plugin外掛後,新建了一個專案並且嘗試執行,但出現下列異常:   通過在百度的搜尋,得知這是由於servlet-api.jar和容器自帶的servlet-api.jar產生了依賴衝突。但是,在百度中沒有

springboot配置好登入攔截後,swagger訪問不了

錯誤資訊: java.lang.ClassCastException: org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springframework.web.me

許可權控制-禁止普通登入使用者通過直輸URL方式訪問系統其它自己不具備許可權的模組

1.描述 一個普通使用者,只有單點登入的許可權,通過一些工具獲取到系統的其它模組的URL ,在位址列直接輸入,訪問,我們在一些按鈕做了一些控制,但是部分不具有操作機會的頁面還是會展現出來,不影響功能,但是也需要做優化處理 2.程式碼(JAVA) @WebFilter(u

使用JWT Token進行RestFul API許可權驗證

問題 後端提供的RestFul API一般都需要進行許可權驗證,而Web框架一般採用Cookies+Session來進行認證。但RestFul API屬於無狀態協議,而在後臺使用Session的話,由於Session本身需要服務端進行維持,這樣就破壞了Rest

從壹開始前後端分離【 .NET Core2.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT許可權驗證【修改】

重大更新: 兩個是上下銜接的,主要是解決本文中,過期時間無效的問題。 群友反饋: 群裡有小夥伴反饋,在Swagger使用的時候報錯,無法看到列表,這裡我說下如何除錯和主要問題: 1、如果遇到問題,這樣的: 請在瀏覽器 =》 F12 ==》 console 控制檯 ==》點選錯誤資

asp.netashx生成驗證碼程式碼放在Linux(centos)主機上訪問時無法顯示問題

最近有個專案加入了驗證碼功能,就從自己部落格以前的程式碼中找到直接使用,直接訪問驗證碼頁面報錯如下: Application Exception System.ArgumentException The requested FontFamily could not be found [GDI+

Django-CBV的使用者登入許可權驗證

1.CBV模式中,由於View中的檢視為類,所有不能像FBV一樣使用裝飾器,故可以繼承一個自定義的類,這個類的功能的驗證使用者有沒有登入,需要登入才能訪問這個類 2.utils資料夾中建立mixin_utils.py檔案 3..mixin_utils.py程式碼: fro

springboot2.0--結合spring security5.0進行許可權控制,從資料庫許可權資訊及增加驗證

  1.在pom.xml中增加spring security jar的引用:      <!--引入spring security--> <dependency> <groupId>org.springframework

Asp.net MVC的全域性許可權驗證方法及實現

       開發過MVC的人都知道,MVC是三個單詞的縮寫,分別為: 模型(Model),檢視(View)和控制Controller)。 MVC模式的目的就是實現Web系統的職能分工。 Model層實現系統中的業務邏輯。 View層用於與使用者的互動。 Controlle

Ocelot統一許可權驗證

Ocelot作為閘道器,可以用來作統一驗證,接上一篇部落格,我們繼續 前一篇,我們建立了OcelotGateway閘道器專案,DemoAAPI專案,DemoBAPI專案,為了驗證使用者並分發Token,現在還需要新增AuthenticationAPI專案,也是asp.net core web api專案,整體

web api 單點登入(SSO) 許可權驗證

分站程式碼: using System;using System.Collections.Generic;using System.Linq;using System.Text.RegularExpressions;using System.Web;using System.Web.Mvc;usin

如何在vue-router的beforeEach鉤子裡做頁面訪問許可權驗證

一般前端做的話放到sessionStorage裡面,通過vuex去管理,直接上程式碼吧(我專案裡'/'是登入頁,'/Table'是登入後的首頁)// main.js router.beforeEach((to, from, next) => { if (to.pat

Thinkphp的RBAC許可權驗證

一、相關概念 訪問控制與RBAC模型 1、訪問控制:通常的多使用者系統都會涉及到訪問控制,所謂訪問控制,是指通過某種方式允許活限制使用者訪問能力及範圍的一種方法。這主要是由於系統需要對關鍵資源進行保護,防止由於非法入侵或者誤操作對業務系統造成破壞。簡而言之,訪問控制即哪些使

DDMSsdcard許可權問題(無法訪問)解決

內推VIVO 博主今年入職VIVO了,VIVO這兩年發展特別迅猛,去年手機銷量排位第一,遠超第二名,而且工作環境比較舒適,中午居然能休息兩小時^_^ 高薪+股票+超高年終獎的模式還是非常具有誘惑力的,想要內推的同學可以把簡歷發我個人郵箱[email

.Net Core3.0 WEB API 使用FluentValidation驗證,實現批量注入

為什麼要使用FluentValidation 1.在日常的開發中,需要驗證引數的合理性,不緊前端需要驗證傳毒的引數,後端也需要驗證引數 2.在領域模型中也應該驗證,做好防禦性的程式設計是一種好的習慣(其實以前重來不寫的,被大佬教育了一番) 3.FluentValidation 是.NET 開發的驗證框架,開源

有圖有真相:你實現當下流行的許可權驗證

摘要:本文通過例項演示JWT實現登入授權流程。通過與傳統的session、cookie和token機制進行對比,分析其中的優缺點。 JWT是什麼 JSON Web Token(縮寫 JWT)是目前最流行的跨域認證解決方案。它是有三部分組成,示例如下,具體的講解如下(jwt是不會有空行的,下面只是為了顯示,便使