Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)
寫在前面
本文地址:http://www.cnblogs.com/yilezhu/p/9315644.html
作者:yilezhu
上一篇關(guān)于Asp.Net Core Web Api圖片上傳的文章使用的是mongoDB進(jìn)行圖片的存儲(chǔ),文章發(fā)布后,張隊(duì)就來了一句,說沒有使用GridFS。的確博主只是進(jìn)行了簡單的圖片上傳以及mongoDB存儲(chǔ)操作,目的是提供思路。具體的圖片存儲(chǔ),有條件的還是基于阿里云OSS或者七牛吧,如果實(shí)在想用MongDB進(jìn)行存儲(chǔ)的話,建議采用GridFS的方式!
又有人說,GridFS大于16M的時(shí)候才適合使用,圖片上傳已經(jīng)控制小于1M了,就沒必要使用GridFS了吧。這里可以指定chunksize的大小。這樣性能上就沒有什么問題了。而且在性能差不多的時(shí)候使用GridFS可以更方便的管理。因此建議如果采用MongDB進(jìn)行文件存儲(chǔ)的話,建議采用GridFS的方式。 這里特別感謝張隊(duì)的耐心指導(dǎo)!
為什么使用IdentityServer4?
上一篇文章中,給大家講解了如何通過 Asp.Net Core Web Api實(shí)現(xiàn)圖片上傳的接口,具體的可以[點(diǎn)這里查看]?。這個(gè)接口是一個(gè)公開的接口,如何發(fā)布的話,任何知道調(diào)用方法的"任何人"都能任意的調(diào)用這個(gè)接口,俗稱“裸奔”。這時(shí)候我們就應(yīng)該給接口加入認(rèn)證以及訪問控制機(jī)制,來加強(qiáng)安全性!那么我們?cè)趺磥韺?shí)現(xiàn)接口的認(rèn)證以及訪問控制呢?這時(shí)候部分人就會(huì)很懵逼了,還有一部分人就會(huì)聯(lián)想到 OpenID Connect 和 OAuth 2.0了!可是怎么實(shí)現(xiàn)呢?從到到位搭一個(gè)這樣的框架,會(huì)累死我滴,可能還要經(jīng)過很長時(shí)間的測(cè)試呢!別擔(dān)心,這時(shí)候就體現(xiàn)出Asp.Net Core社區(qū)的強(qiáng)大了,我們的主角IdentityServer4閃亮登場(chǎng)!
IdentityServer4是什么?能幫我們做什么呢?
IdentityServer4是一套為 ASP.NET Core 2.0開發(fā)的基于OpenID Connect 和 OAuth 2.0 的框架,他能讓我們的系統(tǒng)很輕松的就能很多認(rèn)證以及授權(quán)相關(guān)的功能,比如:單點(diǎn)登錄,api訪問控制等等!其他的我就不介紹了,社區(qū)里面介紹的太多太多了!如果有想了解的OAuth 2.0的可以看看阮一峰的這篇文章[理解OAuth 2.0][http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html] 。最后 IdentityServer4最最最大好處是開源的,用的人也多,而且比較成熟。想想是不是有點(diǎn)小激動(dòng),迫不及待的想試試了。在開始之前,附上[開原地址][https://github.com/IdentityServer/IdentityServer4] 以及[詳細(xì)文檔][https://identityserver4.readthedocs.io/en/release/] 。想了解更多自行閱讀官方文檔吧!
為了演示的方便,本文采用的是客戶端認(rèn)證模式,至于其他的幾種驗(yàn)證模式,大家可以看下上面給出的阮一峰的文章。還有大家用之前要理解下身份認(rèn)證服務(wù)器(IdentityServer),用戶(User),客戶端(Client),資源(Resources),身份令牌(Identity Token),訪問令牌(Access Token)這些概念。如果不清楚的話可以參考曉晨Master的這篇“ASP.NET Core的身份認(rèn)證框架IdentityServer4(3)-術(shù)語的解釋”文章。
Asp.Net Core Web Api中如何使用IdentityServer4呢?
創(chuàng)建IdentityServer4服務(wù)端即“身份認(rèn)證服務(wù)器(IdentityServer)”
新建一個(gè)空的Asp.Net Core Web Api項(xiàng)目,名稱為IdentityServer端口為5001,如下圖所示
通過Nuget安裝IdentityServer4命令如下,記得程序包管理控制套,上面的項(xiàng)目選擇剛剛創(chuàng)建的IdentityServer項(xiàng)目
Install-Package IdentityServer4這里因?yàn)椴捎肙Auth 2.0的客戶端模式,所以簡單地使用一個(gè)類來硬編碼一些資源(Resources)
以及客戶端(Client),代碼如下:
在Startup.cs中注入IdentityServer服務(wù)并使用中間件,代碼如下:
用Postman測(cè)試并獲取AccessToken吧!如下圖所示,在Post請(qǐng)求中傳入,認(rèn)證類型,client_id以及client_secret即可獲取AccessToken:
當(dāng)傳入錯(cuò)誤的Client_id或者密碼將出現(xiàn)下面的結(jié)果
至此IdentityServer服務(wù)已經(jīng)簡單地完成了!下面改造下我們的圖片上傳服務(wù)。
改造圖片上傳接口,加入授權(quán)認(rèn)證
在圖片上傳api項(xiàng)目中添加IdentityServer nuget包,這里只需要加入AccessTokenValidation包即可,注意選擇api項(xiàng)目:
Install-Package IdentityServer4.AccessTokenValidationappsettings.json中加入IdentityServerOptions,進(jìn)行IdentityServer的一些配置
? ?"ServerIP": "localhost", ?
? ??"ServerPort": 5001,
? ??? ?"IdentityScheme": "Bearer", ?
? ??? ?"ResourceName": "PictureApi"}
新建一個(gè)類用來匹配這個(gè)options,這樣可以爽爽的使用:
/// <summary>/// yilezhu/// 2018.7.15/// IdentityServer的配置選項(xiàng)/// </summary>public class IdentityServerOptions{ ? ? ? ?/// <summary>/// 授權(quán)服務(wù)器的Ip地址/// </summary>public string ServerIP { get; set; } ? ? ? ?/// <summary>/// 授權(quán)服務(wù)器的端口號(hào)/// </summary>public int ServerPort { get; set; } ? ? ? ?/// <summary>/// access_token的類型,獲取access_token的時(shí)候返回參數(shù)中的token_type一致/// </summary>public string IdentityScheme { get; set; } ? ? ? ?/// <summary>/// 資源名稱,認(rèn)證服務(wù)注冊(cè)的資源列表名稱一致,/// </summary>public string ResourceName { get; set; }}在Startup.cs中加入identityServer驗(yàn)證
為需要說全訪問的圖片上傳接口添加[Authorize]特性,當(dāng)然要引用下命名空間:
using Microsoft.AspNetCore.Authorization; /// <summary>/// 接口上傳圖片方法/// </summary>/// <param name="fileDtos">文件傳輸對(duì)象,傳過來的json數(shù)據(jù)</param>/// <returns>上傳結(jié)果</returns>[HttpPost][Authorize] ? ? ?? ? ??public async Task<UploadResult> Post([FromBody] FileDtos fileDtos) ? ? ? ?{…………}
把授權(quán)服務(wù)以及圖片上傳接口同時(shí)啟動(dòng)下,然后Postman再次進(jìn)行下圖片上傳的測(cè)試:
在請(qǐng)求頭上加入我們獲取的token信息,來再次訪問下:
Asp.Net Core Web Api圖片上傳接口集成Identity Server 4安全認(rèn)證實(shí)例教程到此結(jié)束了。
示例代碼
[點(diǎn)我下載][https://github.com/yilezhu/ImageUploadApiDemo]
總結(jié)
本文通過圖片上傳這個(gè)Asp.Net Core Web Api做引子,然后引入Identity Server 4。然后通過一個(gè)簡單地實(shí)例教程闡述了如何創(chuàng)建Identity Server 以及接口中如何進(jìn)行授權(quán)認(rèn)證訪問。博主盡量采用通俗易懂的語言進(jìn)行闡述,步驟也盡量詳細(xì),目的就是為了讓初學(xué)者也能按照步驟一步一步的實(shí)現(xiàn)Identity Server 4的認(rèn)證。下一篇我會(huì)加入SwaggerUI生成接口文檔,當(dāng)然大家也可以看下我的這篇關(guān)于SwaggerUI的文章[ASP.NET Core WebApi使用Swagger生成api說明文檔看這篇就夠了][https://www.cnblogs.com/yilezhu/p/9241261.html] 。這個(gè)系列的教程源碼,我已經(jīng)放在github上了,大家可以點(diǎn)這里進(jìn)行訪問源代碼。https://github.com/yilezhu/ImageUploadApiDemo
原文地址:http://www.cnblogs.com/yilezhu/p/9315644.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Helm - Kubernetes服务编
- 下一篇: .NET Core开发日志——从ASP.