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

9b35a862858aeb465ce101402de88966.png

在我上篇文章如何在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。

913a527126ac68f667fbc8e2978130ab.png

KeyCloak 的登录页面

c830d48559595c3e9be9f347379775c6.png

登录成功后的 Swagger UI

基于角色的访问

我们可以通过仅限制特定角色的用户来进一步增强。

对于演示,我创建了一个名为“ devteam ”的角色并分配给我们的用户“demo”。

1654942ab6bc4d430b0f4b0f4b19c337.png

在 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/289515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python opencv 图像切割_【OpenCV+Python】图像的基本操作与算术运算

图像的基本操作在上个教程中&#xff0c;我们介绍了使用鼠标画笔的功能。本次教程&#xff0c;我们将要谈及OpenCV图像处理的基本操作。本次教程的所有操作基本上都和Numpy相关&#xff0c;而不是与OpenCV相关。要使用OpenCV编写更好的优化代码&#xff0c;需要Numpy的丰富知识…

光伏领跑者火热前行 可靠性护航“长跑”

随着第三批光伏领跑者申报标准的出台&#xff0c;在目前普通电站指标有可能缩水的情况下&#xff0c;2017年8-10GW的光伏领跑者项目又将成为各电站投资商争夺的“红海”。光伏领跑者在过去两年时间里为行业带来的变化有目共睹&#xff0c;从模式创新到电价下降&#xff0c;快速…

鸿蒙os系统被推送,鸿蒙来了!华为大规模推送鸿蒙OS系统,造成网站一度瘫痪...

千呼万唤始出来&#xff0c;期盼已久的手机鸿蒙OS系统终于迎来了大规模推送&#xff01;今年2月份在华为Mate X2折叠屏手机发布会上&#xff0c;华为就曾表示将在4月份开始大规模推送鸿蒙OS系统&#xff0c;4月27日通过测试申请的用户正式接到升级鸿蒙OS系统的通知&#xff0c;…

jps、jinfo、jstat、jstack、jmap、jconsole等命令简介

2019独角兽企业重金招聘Python工程师标准>>> JDK提供了几个很实用的工具&#xff0c;如下&#xff1a; jinfo&#xff1a;观察运行中的java程序的运行环境参数&#xff1a;参数包括Java System属性和JVM命令行参数&#xff0c;java class path等信息。命令格式&…

读《底层逻辑》

《底层逻辑》本书作者是刘润&#xff0c;他在得到上开设了课程《5 分钟商学院》&#xff0c;我也是在得到上知道的这本书&#xff0c;这本书在豆瓣上的评分不是很高&#xff0c;褒贬不一&#xff0c;不过我看着觉得挺好。看了一些豆瓣的评论&#xff0c;觉得这本书不好有这么几…

2016年:勒索病毒造成损失预估超过10亿美元

根据趋势科技公布的最新报告&#xff08;PDF&#xff09;&#xff0c;2016年是敲诈勒索软件频发的一年&#xff0c;同比增长752%&#xff0c;预测由Locky、Goldeneye等勒索病毒所造成的损失超过10亿美元。报告中同时指出企业和个人是勒索软件的重灾区&#xff0c;而且勒索病毒还…

python3.6字典有序_为什么从Python 3.6开始字典有序并效率更高

在Python 3.5&#xff08;含&#xff09;以前&#xff0c;字典是不能保证顺序的&#xff0c;键值对A先插入字典&#xff0c;键值对B后插入字典&#xff0c;但是当你打印字典的Keys列表时&#xff0c;你会发现B可能在A的前面。 但是从Python 3.6开始&#xff0c;字典是变成有顺序…

Linux的进程/线程间通信方式总结

2019独角兽企业重金招聘Python工程师标准>>> Linux系统中的进程间通信方式主要以下几种: 同一主机上的进程通信方式 * UNIX进程间通信方式: 包括管道(PIPE), 有名管道(FIFO), 和信号(Signal) * System V进程通信方式&#xff1a;包括信号量(Semaphore), 消息队列(Me…

开源作者去世后,代码谁来继承?

文 | 肖滢出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013)2008 年初&#xff0c;澳大利亚一对兄弟 Simon Zerner 和 Toby Zerner 开始了 esoTalk 的开发。不幸的是&#xff0c; esoTalk 尚处于 Alpha 阶段&#xff0c;主力开发人员哥哥 Simon 就在 2009 年年中去世。…

项目中使用CLR编程

1、创建自己的项目 2、右键“解决方案。。。”→添加→新建项目→C#→数据库→SQL Server项目,如下图所示: 3、选择操作数据库

SDN火爆!未来五年年复合增长率达98%

在如今的网络世界&#xff0c;软件定义网络SDN和网络功能虚拟化NFV成为了新的“宠儿”&#xff0c;特别是对于运营商来说&#xff0c;已经将它们视为面向未来转型的关键。因此已经有越来越多的运营商开始尝试引入SDN和NFV技术&#xff0c;尽管它们的标准还尚未完善。 最早采用S…

python桌面程序开发_程序员之路:python3+PyQt5+pycharm桌面GUI开发

先看效果&#xff1a;图 1 没错&#xff0c;学过C#的同学应该很熟悉这个界面&#xff0c;按钮风格和界面风格很相似&#xff0c;万万没想到&#xff0c;python也可以做出这样的界面&#xff0c;简直了&#xff01;&#xff08;图 1&#xff09; 正文开始 一、安装python 为啥要…

转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)

2019独角兽企业重金招聘Python工程师标准>>> ‍‍相关参考资料&#xff1a;MySQL 赋予用户权限命令的简单格式可概括为&#xff1a;grant 权限 on 数据库对象 to 用户一、grant 普通数据用户&#xff0c;查询、插入、更新、删除 数据库中所有表数据的权利。 grant s…

kafka控制台模拟消费_Kafka 详解

kafka简介Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各种需…

python在web可以开发吗_Python Web开发

参考原文 WSGI接口 WSGI&#xff08;Web Server Gateway Interface&#xff09;是一个接口&#xff0c;用来屏蔽底部的细节&#xff08;如TCP的建立连接&#xff0c;HTTP原始请求和响应格式等&#xff09;。WSGI接口定义非常简单&#xff0c;只需要Web开发者实现一个函数&#…

更新丨.NET 7 预览版2 中的 ASP.NET Core

点击上方蓝字 关注我们&#xff08;本文阅读时间&#xff1a;6分钟).NET 7 预览版2 现已推出&#xff0c;其中包括对 ASP.NET Core 的许多重大改进。以下是此预览版中新增内容的摘要&#xff1a;• 推断来自服务的 API 控制器操作参数&#xff1b;• SignalR 集线器方法的依赖注…

LoadRunner+Android模所器实现抓包并调试本地服务端

为了测试Android软件的服务端的功能&#xff0c;需要重现某些客户端操作&#xff0c;便于发现功能问题&#xff0c;性能问题。也方便客户端与本机服务端特别是服务端代码进行断点调试。这个时候需要对网络操作进行重现。loadRunner是hp公司开发的压力测试工具。功能比较强大&am…

架构师

系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的人。具体来说是一个确认和评估系统需求&#xff0c;给出开发规范&#xff0c;搭建系统实现的核心构架&#xff0c;并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”…

统信uos系统考试题_148款!富士通及旗下晟拓品牌系列打印机适配统信UOS

近日&#xff0c;南京富士通电子信息科技股份有限公司(简称&#xff1a;富士通)及其旗下晟拓子品牌148款主流打印机产品与统信桌面操作系统UOS的适配工作即将完成&#xff0c;这次适配涵盖了富士通及晟拓的常用主流机型。富士通正式成为统信软件产品生态合作伙伴。本次适配&…

手机浏览器html5游戏,移动浏览器都爱 HTML5 ?

目前中国第三方手机浏览器市场竞争正在愈演愈烈&#xff0c;但由于各应用开发商对手机浏览器的内容和资源的整合能力、技术研发能力、战略布局目的等方面均各不相同&#xff0c;浏览器产品也出现了同质化严重、内容匮乏等问题&#xff0c;亮点突出、吸引用户的产品较缺乏&#…