日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

發布時間:2023/12/4 asp.net 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在我上篇文章如何在ASP.Net Core的生產環境中保護swagger ui中,我們討論了如何使用基本身份驗證來保護 swagger ui。

使用 OAuth 2.0 和 OpenIdConnect 進行保護

隨著應用程序越來越多地使用 OAuth 和 OpenIdConnect,應用程序很有可能使用 OAuth 和 OpenIDConnect 進行身份驗證和授權,在這種情況下,我們希望使用相同的機制來保護 swagger ui,而不是基本身份驗證。

在本教程中,我將探討如何使用 OAuth 和 OpenIDConnect 來保護 swagger ui。

讓我們首先對我們在上一篇文章中創建的現有解決方案進行更改。

添加一個名為 SwaggerOAuthMiddleware的類并添加以下代碼

public class SwaggerOAuthMiddleware {private readonly RequestDelegate next;public SwaggerOAuthMiddleware(RequestDelegate next){this.next = next;}public async Task InvokeAsync(HttpContext context){if (IsSwaggerUI(context.Request.Path)){// if user is not authenticatedif (!context.User.Identity.IsAuthenticated){await context.ChallengeAsync();return;}}await next.Invoke(context);}public bool IsSwaggerUI(PathString pathString){return pathString.StartsWithSegments("/swagger");} }

在 startup.cs 的 ConfigureServices 方法中添加以下代碼

services.Configure<CookiePolicyOptions>(options => {options.CheckConsentNeeded = context => true;options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddAuthentication(options => {options.DefaultScheme = "Cookies"options.DefaultChallengeScheme = "oidc"; }) .AddCookie("Cookies") .AddOpenIdConnect("oidc", options => {options.SignInScheme = "Cookies";options.Authority = Configuration["jwt:Authority"];options.ClientId = Configuration["jwt:Audience"];options.ResponseType = "code";options.Prompt = "login";options.GetClaimsFromUserInfoEndpoint = true;options.SaveTokens = true; });

修改現有的擴展方法以使用 SwaggerOAuthMiddleware

public static IApplicationBuilder UseSwaggerAuthorized(this IApplicationBuilder builder) {return builder.UseMiddleware<SwaggerOAuthMiddleware>(); }

修改配置方法如下

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { ... app.UseAuthentication(); app.UseSwaggerAuthorized(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "SecureSwagger v1")); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseRouting(); app.UseAuthorization(); ... }

身份提供者

我們需要一個身份提供者來測試我們的應用程序。我使用 KeyCloak 作為演示的身份提供者,但也可以使用任何其他身份提供者。作為資深.NET開發者,相信你代碼中用的最多的是IdentityServer4.

我有本地運行的 docker 版本的 KeyCloak。點擊鏈接了解更多關于 keycloak 如何作為 docker 容器在本地運行的信息。

鏈接

演示

我在 KeyCloak中創建了一個名為“ demo ”的用戶。

有了所有這些更改,我們就可以運行我們的應用程序了。

按 F5 運行應用程序。

一旦應用程序啟動 swagger ui,它就會被重定向到登錄頁面。

我們將使用新創建的用戶“ demo ”登錄。成功登錄后,它將重定向回 swagger ui。

KeyCloak 的登錄頁面

登錄成功后的 Swagger UI

基于角色的訪問

我們可以通過僅限制特定角色的用戶來進一步增強。

對于演示,我創建了一個名為“ devteam ”的角色并分配給我們的用戶“demo”。

在 KeyCloak 中添加了新角色

在 SwaggerOAuthMiddleware.cs 中添加以下代碼

if (!context.User.HasClaim("role", "devteam")) {await context.ChallengeAsync();return; }

通過此更改,只有角色“ devteam ”的用戶才能訪問 swagger ui。

至此結束!

本文翻譯自:https://medium.com/@niteshsinghal85/securing-swagger-ui-in-production-in-asp-net-core-part-2-dc2ae0f03c73

總結

以上是生活随笔為你收集整理的[第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。