Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)
写在前面
本文地址:http://www.cnblogs.com/yilezhu/p/9315644.html
作者:yilezhu
上一篇关于Asp.Net Core Web Api图片上传的文章使用的是mongoDB进行图片的存储,文章发布后,张队就来了一句,说没有使用GridFS。的确博主只是进行了简单的图片上传以及mongoDB存储操作,目的是提供思路。具体的图片存储,有条件的还是基于阿里云OSS或者七牛吧,如果实在想用MongDB进行存储的话,建议采用GridFS的方式!
又有人说,GridFS大于16M的时候才适合使用,图片上传已经控制小于1M了,就没必要使用GridFS了吧。这里可以指定chunksize的大小。这样性能上就没有什么问题了。而且在性能差不多的时候使用GridFS可以更方便的管理。因此建议如果采用MongDB进行文件存储的话,建议采用GridFS的方式。 这里特别感谢张队的耐心指导!
为什么使用IdentityServer4?
上一篇文章中,给大家讲解了如何通过 Asp.Net Core Web Api实现图片上传的接口,具体的可以[点这里查看] 。这个接口是一个公开的接口,如何发布的话,任何知道调用方法的"任何人"都能任意的调用这个接口,俗称“裸奔”。这时候我们就应该给接口加入认证以及访问控制机制,来加强安全性!那么我们怎么来实现接口的认证以及访问控制呢?这时候部分人就会很懵逼了,还有一部分人就会联想到 OpenID Connect 和 OAuth 2.0了!可是怎么实现呢?从到到位搭一个这样的框架,会累死我滴,可能还要经过很长时间的测试呢!别担心,这时候就体现出Asp.Net Core社区的强大了,我们的主角IdentityServer4闪亮登场!
IdentityServer4是什么?能帮我们做什么呢?
IdentityServer4是一套为 ASP.NET Core 2.0开发的基于OpenID Connect 和 OAuth 2.0 的框架,他能让我们的系统很轻松的就能很多认证以及授权相关的功能,比如:单点登录,api访问控制等等!其他的我就不介绍了,社区里面介绍的太多太多了!如果有想了解的OAuth 2.0的可以看看阮一峰的这篇文章[理解OAuth 2.0][http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html] 。最后 IdentityServer4最最最大好处是开源的,用的人也多,而且比较成熟。想想是不是有点小激动,迫不及待的想试试了。在开始之前,附上[开原地址][https://github.com/IdentityServer/IdentityServer4] 以及[详细文档][https://identityserver4.readthedocs.io/en/release/] 。想了解更多自行阅读官方文档吧!
为了演示的方便,本文采用的是客户端认证模式,至于其他的几种验证模式,大家可以看下上面给出的阮一峰的文章。还有大家用之前要理解下身份认证服务器(IdentityServer),用户(User),客户端(Client),资源(Resources),身份令牌(Identity Token),访问令牌(Access Token)这些概念。如果不清楚的话可以参考晓晨Master的这篇“ASP.NET Core的身份认证框架IdentityServer4(3)-术语的解释”文章。
Asp.Net Core Web Api中如何使用IdentityServer4呢?
创建IdentityServer4服务端即“身份认证服务器(IdentityServer)”
新建一个空的Asp.Net Core Web Api项目,名称为IdentityServer端口为5001,如下图所示
通过Nuget安装IdentityServer4命令如下,记得程序包管理控制套,上面的项目选择刚刚创建的IdentityServer项目
Install-Package IdentityServer4
这里因为采用OAuth 2.0的客户端模式,所以简单地使用一个类来硬编码一些资源(Resources)
以及客户端(Client),代码如下:
在Startup.cs中注入IdentityServer服务并使用中间件,代码如下:
用Postman测试并获取AccessToken吧!如下图所示,在Post请求中传入,认证类型,client_id以及client_secret即可获取AccessToken:
当传入错误的Client_id或者密码将出现下面的结果
至此IdentityServer服务已经简单地完成了!下面改造下我们的图片上传服务。
改造图片上传接口,加入授权认证
在图片上传api项目中添加IdentityServer nuget包,这里只需要加入AccessTokenValidation包即可,注意选择api项目:
Install-Package IdentityServer4.AccessTokenValidation
appsettings.json中加入IdentityServerOptions,进行IdentityServer的一些配置
"IdentityServerOptions": { "ServerIP": "localhost", "ServerPort": 5001, "IdentityScheme": "Bearer", "ResourceName": "PictureApi"}
新建一个类用来匹配这个options,这样可以爽爽的使用:
/// <summary>/// yilezhu/// 2018.7.15/// IdentityServer的配置选项/// </summary>public class IdentityServerOptions{ /// <summary>/// 授权服务器的Ip地址/// </summary>public string ServerIP { get; set; } /// <summary>/// 授权服务器的端口号/// </summary>public int ServerPort { get; set; } /// <summary>/// access_token的类型,获取access_token的时候返回参数中的token_type一致/// </summary>public string IdentityScheme { get; set; } /// <summary>/// 资源名称,认证服务注册的资源列表名称一致,/// </summary>public string ResourceName { get; set; }}
在Startup.cs中加入identityServer验证
// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services) { //注入OptionsOptionsConfigure(services); var identityServerOptions = new IdentityServerOptions();Configuration.Bind("IdentityServerOptions", identityServerOptions);services.AddAuthentication(identityServerOptions.IdentityScheme).AddIdentityServerAuthentication(options =>{options.RequireHttpsMetadata = false; //是否启用httpsoptions.Authority = $"http://{identityServerOptions.ServerIP}:{identityServerOptions.ServerPort}";//配置授权认证的地址options.ApiName = identityServerOptions.ResourceName; //资源名称,跟认证服务中注册的资源列表名称中的apiResource一致});services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseAuthentication();app.UseMvc();} /// <summary>/// yilezhu/// 2018.7.10/// 注册Options/// </summary>/// <param name="services">服务容器</param>private void OptionsConfigure(IServiceCollection services) { //MongodbHost信息services.Configure<MongodbHostOptions>(Configuration.GetSection("MongodbHost")); //图片选项services.Configure<PictureOptions>(Configuration.GetSection("PictureOptions"));}
为需要说全访问的图片上传接口添加[Authorize]特性,当然要引用下命名空间:
using Microsoft.AspNetCore.Authorization;
/// <summary>/// 接口上传图片方法/// </summary>/// <param name="fileDtos">文件传输对象,传过来的json数据</param>/// <returns>上传结果</returns>[HttpPost][Authorize] public async Task<UploadResult> Post([FromBody] FileDtos fileDtos) {…………}
把授权服务以及图片上传接口同时启动下,然后Postman再次进行下图片上传的测试:
在请求头上加入我们获取的token信息,来再次访问下:
Asp.Net Core Web Api图片上传接口集成Identity Server 4安全认证实例教程到此结束了。
示例代码
[点我下载][https://github.com/yilezhu/ImageUploadApiDemo]
总结
本文通过图片上传这个Asp.Net Core Web Api做引子,然后引入Identity Server 4。然后通过一个简单地实例教程阐述了如何创建Identity Server 以及接口中如何进行授权认证访问。博主尽量采用通俗易懂的语言进行阐述,步骤也尽量详细,目的就是为了让初学者也能按照步骤一步一步的实现Identity Server 4的认证。下一篇我会加入SwaggerUI生成接口文档,当然大家也可以看下我的这篇关于SwaggerUI的文章[ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了][https://www.cnblogs.com/yilezhu/p/9241261.html] 。这个系列的教程源码,我已经放在github上了,大家可以点这里进行访问源代码。https://github.com/yilezhu/ImageUploadApiDemo
原文地址:http://www.cnblogs.com/yilezhu/p/9315644.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)相关推荐
- python生成图片链接_python 实现图片上传接口开发 并生成可以访问的图片url
版本:python3.7 功能,开发一个用户访问的页面,支持图片上传,并将其保存在服务器. 项目结构: app.py文件内容如下: from flask import Flask, Response, ...
- winform实现FTP上传、下载、删除文件(附源码下载)
一个用winform开发的FTP上传.下载.删除文件的简单列子: 配套源码下载:https://download.csdn.net/download/djk8888/10473477 注释尽可能详尽, ...
- 性能服务器图片介绍大图,服务端图片图片上传接口性能压测总结
服务端图片上传接口性能压测总结 一.性能测试时需要关注点 用户操作的相应时间 服务器资源使用情况是否合理 应用服务器和数据库资源使用是否合理 系统能否实现扩展 系统最多支持多少用户访问.系统最大业务处 ...
- 【校招VIP】[约起来] 接口设计1:图片上传接口
今天来看商业实战项目约起来的第一个模块,活动发布模块的接口设计,这期课程包括两个接口,一个是图片上传,一个是活动发布后的提交. 首先了解图片上传接口,常规的图片上传需要前后端配合.前端通过接口传给后端 ...
- asp如何将图片文件上传到mysql数据库中_怎样才能利用ASP把图片上传到数据库
欢迎来到小编的文章进行学习阅读,想必大家又有很多问题吧,在这里会有你想要收获的答案,请大家慢慢学习吧! ASP(Active Server Pages)是Microsoft很早就推出的一种WEB应用程 ...
- nodejs微信支付小微商户申请入驻时,如何实现图片上传接口
微信支付小微商户可以通过小程序<微信买单服务商助手>来进件,也可以通过API接口来进件(详情可查阅小微商户专属接口文档). 通过API接口进件前需要先在商户资料中的身份证照片和门店照片通过 ...
- Layui富文本编辑器图片上传接口(.NET C#)
本来想偷懒找个现成的接口,搜了一下发现没有现成的,那我在这写一个并分享给大家吧. demo打包好了在我的csdn下载中心:http://download.csdn.net/download/xiang ...
- [共享]一个文件上传的控件,绝对是精品源码
[共享]一个文件上传的控件,绝对是精品源码 前段时候在www.codeproject.com上看到一个文件上传的控件,觉得很好,共享给园子里的朋友. 原文链接:http://www.codeproje ...
- Python 实现图片格式转换,jpg\png\webp等,附源码
Python 实现图片格式转换,jpg\png\webp等,附源码 需要使用 PIL库,但python 3是无法安装该库的,如果是python 3安装pillow库即可. 1.安装 python 2 ...
最新文章
- Silverlight 2 数据绑定演示程序(附源代码下载)
- PostgreSQL在何处处理 sql查询之四十七
- elementui表格复制_Element-UI中关于table表格的那些骚操作
- 使用jsp打印HTTP请求头部所有字段的值
- MYSQ 查看 2 进制日志
- 你的旧船票能否搭上这艘巨轮?——解读近5年大数据产业发展规划
- python修改散点图中点的颜色_如何在seaborn散点图中更改点边颜色?
- 【eclipse】Multiple annotations found at this line:——解决方法
- gitlab中文网的使用_gitlab使用教程-GitLab,教程
- CISCO路由基本配置命令
- python实现Kmeans算法
- python——operator详解
- 小红书运营模式是怎样的?弄清楚小红书底层逻辑
- 构造方法的作用和特点
- Dynamips和Vmware完成CCVP试验(3)
- 调用iframe子页面中的函数
- 慧编程python硬件_慧编程 mBlock 在编程学习中有哪些好用的技巧,积木或扩展,让你感觉相见恨晚?...
- mysql 查询主键和主键列,查询Mysql表名、主键、列名
- 【汇正财经】沪深创缩量调整
- S32K SDK使用详解之S32 SDK软件架构详解
热门文章
- 2016 China Joy抢先看,文末有彩蛋!
- VS2015不能修改安装路径问题
- WCF分布式开发常见错误(25):The certificate 'CN=WCFHTTPS' must have a private key
- 阿里云MaxCompute香港开服 将引入更多人工智能服务
- 20161114记录一件工作的事
- (转)前置++和后置++的区别
- linux磁盘管理------LVM
- 安装配置libmemcached
- 基于ASP.NET Core SignalR的流式传输
- .NET6下周发布真的香,可不少人却只会.NET Framework!