WEBAPI 增加身份驗證 (OAUTH 2.0方式)

1,在Webapi項目下添加如下引用:

Microsoft.AspNet.WebApi.Owin

Owin

Microsoft.Owin.Host.SystemWeb

Microsoft.Owin.Security.OAuth

Microsoft.Owin.Security.Cookies

Microsoft.AspNet.Identity.Owin

Microsoft.Owin.Cors

2, 在項目下新建Startup類,這個類將作為owin的啟動入口,添加下面的代碼

3,修改?Startup類中方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public?class?Startup
{
????public?void?Configuration(IAppBuilder app)
????{
????????// 有關如何配置應用程序的詳細信息,請訪問 http://go.microsoft.com/fwlink/?LinkID=316888
????????ConfigAuth(app);
????????HttpConfiguration config =?new?HttpConfiguration();
????????WebApiConfig.Register(config);
????????app.UseCors(CorsOptions.AllowAll);
????????app.UseWebApi(config);
????}
????public?void?ConfigAuth(IAppBuilder app)
????{
????????OAuthAuthorizationServerOptions option =?new?OAuthAuthorizationServerOptions()
????????{
????????????AllowInsecureHttp =?true,
????????????TokenEndpointPath =?new?PathString("/token"),?//獲取 access_token 授權服務請求地址
????????????AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),?//access_token 過期時間
????????????Provider =?new?SimpleAuthorizationServerProvider(),?//access_token 相關授權服務
????????????RefreshTokenProvider =?new?SimpleRefreshTokenProvider()?//refresh_token 授權服務
????????};
????????app.UseOAuthAuthorizationServer(option);
????????app.UseOAuthBearerAuthentication(new?OAuthBearerAuthenticationOptions());
????}
}

4, OAuth身份認證,新建SimpleAuthorizationServerProvider類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public?class?SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
????public?override?Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
????{
????????context.Validated();
????????return?Task.FromResult<object>(null);
????}
????public?override?async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
????{
????????context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin",?new[] {?"*"?});
????????AccountService accService =?new?AccountService();
????????string?md5Pwd = LogHelper.MD5CryptoPasswd(context.Password);
????????IList<object[]> ul = accService.Login(context.UserName, md5Pwd);
????????if?(ul.Count() == 0)
????????{
????????????context.SetError("invalid_grant",?"The username or password is incorrect");
????????????return;
????????}
????????var?identity =?new?ClaimsIdentity(context.Options.AuthenticationType);
????????identity.AddClaim(new?Claim("sub", context.UserName));
????????identity.AddClaim(new?Claim("role",?"user"));
????????context.Validated(identity);
????}
}

5,?新建SimpleRefreshTokenProvider類

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public?class?SimpleRefreshTokenProvider : AuthenticationTokenProvider
{
????private?static?ConcurrentDictionary<string,?string> _refreshTokens =?new?ConcurrentDictionary<string,?string>();
????/// <summary>
????/// 生成 refresh_token
????/// </summary>
????public?override?void?Create(AuthenticationTokenCreateContext context)
????{
????????context.Ticket.Properties.IssuedUtc = DateTime.UtcNow;
????????context.Ticket.Properties.ExpiresUtc = DateTime.UtcNow.AddDays(60);
????????context.SetToken(Guid.NewGuid().ToString("n"));
????????_refreshTokens[context.Token] = context.SerializeTicket();
????}
????/// <summary>
????/// 由 refresh_token 解析成 access_token
????/// </summary>
????public?override?void?Receive(AuthenticationTokenReceiveContext context)
????{
????????string?value;
????????if?(_refreshTokens.TryRemove(context.Token,?out?value))
????????{
????????????context.DeserializeTicket(value);
????????}
????}
}

6, 在要加驗證的接口上加上[Authorize]標記

1
2
3
4
5
6
7
8
9
10
[Authorize]
public?class?EmployeeController : ApiController
{
????//查詢所有員工
????[HttpGet]
????public?IList<UC_Employee> GetAllEmps()
????{
  ????return?new?List<UC_Employee>();
????}
}

7,調用api程序

?

8,傳入參數,獲取token

9,傳入access_token

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意需保留此段聲明,且在文章頁面明顯位置給出原文連接。

作者:Lnice
出處:http://www.cnblogs.com/lnice

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286439.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言試題二之計算并輸出下列多項式值s=1+1/(1+2)+1/(1+2+3)+..1/(1+2+3…+50)

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 計算并輸出…

無代碼iVX編程實現簡單 小蜜蜂 經典游戲

首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后選擇相對定位&#xff0c;咱們選擇2D游戲類型制作一個簡單小蜜蜂游戲&#xff1a; 接著咱們創建一個物理世界&#xff0c;并且將頁面布局如以下&#xff1a; 以上布局中&#xff0c;矩形為模擬飛機、…

【無人機航空攝影測量精品教程】目錄:Pix4d、EPS、CC、PhotoScan、Godwork項目化作業流程及注意事項匯總

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 該專欄為目前最為熱門的無人機航測內外業項目&#xff0c;主要內容包括&#xff1a;無人機航測外業作業流程&#xff08;像控點布設、航線規劃、仿地飛行、航拍&#xff09;和內業數據處理軟件&#xff08;Pix4d、CC、EP…

WPF 基礎控件之 Slider 樣式

其他基礎控件1.Window2.Button3.CheckBox4.ComboBox5.DataGrid 6.DatePicker7.Expander8.GroupBox9.ListBox10.ListView11.Menu12.PasswordBox13.TextBox14.RadioButton15.ToggleButtonSlider 實現下面的效果1&#xff09;Slider來實現動畫&#xff1b;Grid嵌套 Border并設置S…

SQL 通過syscolumns.xtype動態查找指定數據類型字段所包含的數據

表中太多列&#xff0c;只想查找某些比如&#xff0c;數據類型為varchar的字段的數據。 思路&#xff1a;1、先獲取列名&#xff1a; select * from syscolumns where id(select max(id) from sysobjects where xtypeu and nametest_A)2、查找指定數據類型&#xff0c;xtype就…

css案例學習之span邊框實現的特殊效果

bottom left bottom right top left top right 配合顏色來使用&#xff0c;實現一些神奇的效果 #menu a span{height:0;width:0;/*border-top:solid 6px #fff;border-left:solid 6px #f90;*//*border-top:solid 6px #fff;border-right:solid 6px #f90;*//*border-bottom:solid …

網頁版消消樂快速實現,無代碼嗎iVX 真那么簡單?

最近沒事想做個消消樂&#xff0c;然后聽說 iVX 免費了&#xff0c;所以又跑去看看 iVX 了&#xff0c;就用一個無代碼來看看消消樂怎么玩吧。 首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后咱們不需要游戲類型也可以制作一個消消樂游戲&#xff1a…

虛擬化記錄--No.1

近段時間&#xff0c;會花些時間做關于系統虛擬化的工作。所以會做一些這樣的記錄。相信很多東西不會特別成體系&#xff0c;每個人因為關注的不同而記錄和學習的重點也會有比較大的出入。這篇是NO.1(注意不是TOP 1 )真的是由于對于ORACLE很有感覺&#xff0c;所以上手去做的也…

C語言試題三之計算并輸出 s=1+(1+2^(0.5))+(1+2^(0.5)+3^(0.5))+…+(1+2^(0.5)+3^(0.5)+…+n^(0.5))

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1 、題目 請編寫函…

C# Java間進行RSA加密解密交互

這里&#xff0c;講一下RSA算法加解密在C#和Java之間交互的問題&#xff0c;這兩天糾結了很久&#xff0c;也看了很多其他人寫的文章&#xff0c;頗受裨益&#xff0c;但沒能解決我的實際問題&#xff0c;終于&#xff0c;還是被我搗鼓出來了。 首先&#xff0c;介紹一下寫這代…

【Microstation】三維建模基礎及軟件入門到精通實驗教程目錄

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 MicroStation是一款非常不錯的二維和三維設計軟件&#xff0c;由奔特力&#xff08;Bentley&#xff09;工程軟件系統有限公司開發的一款軟件。在CAD設計上該軟件是和AutoCAD是齊名的軟件&#xff0c;其專用的文件格式是…

無代碼iVX編程實現簡單魂斗羅

首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后咱們選擇2D游戲類型制作一個簡單魂斗羅游戲&#xff1a; 隨后咱們開始創建一個物理世界&#xff0c;不并且在物理世界之下創建一個一個圖片添加物體屬性&#xff0c;在物體屬性中更改對應的屬性內容&am…

【ArcGIS遇上Python】ArcGIS Python批處理入門到精通實用教程目錄

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 Python語言是目前很火熱的語言&#xff0c;極大的促進了人工智能發展。你知道在ArcGIS中也會有python的身影嗎&#xff1f;事實上&#xff0c;在ArcGIS中使用Python會起到事半功倍的效果&#xff0c;大大提高工作效率&am…

Android之提示javax.net.ssl.SSLHandshakeException: Chain validation failed

1、問題 個別手機用OkDownload下載Bilibili網址視頻的時候下載失敗,但是大部分手機下載沒問題。 在繼承的DownloadListener4WithSpeed類的重寫taskEnd函數里面。 override fun taskEnd(task: DownloadTask, cause: EndCause, realCause: Exception?, taskSpeed: SpeedCalcu…

c# XML和實體類之間相互轉換(序列化和反序列化)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Data; using System.Xml; using System.Xml.Serialization; /// <summary>/// Xml序列化與反序列化/// </summary>public class XmlUtil {…

深入探究MinimalApi是如何在Swagger中展示的

前言之前看到技術群里有同學討論說對于MinimalApi能接入到Swagger中感到很神奇,加上Swagger的數據本身是支持OpenApi2.0和OpenApi3.0使得swagger.json成為了許多接口文檔管理工具的標準數據源。ASP.NET Core能夠輕松快速的集成Swagger得益于微軟對OpenApi的大力支持&#xff0c…

語句的輸入、輸出

一、C#基礎 1、項目后綴&#xff1a; .config——配置文件&#xff08;存放配置參數文件&#xff09; .csproj——項目文件&#xff08;管理文件項&#xff09; .sln——解決方案文件&#xff08;管理項目&#xff09; .cs——源文件&#xff08;程序代碼&#xff09; 2、函數四…

Samba平臺搭建和用戶自行修改密碼環境搭建筆記

Samba 平臺搭建和用戶自行修改密碼環境搭建筆記系統&#xff1a;CentOS release 6.5 (Final)x86_64軟件: samba #服務端samba-client #客戶端samba-common #通用工具和庫Apache:httpdWeb: changepassword-0.9.tar.gz #需 GCC 編譯源碼包&#…

Android使用C/C++來保存密鑰

Android使用C/C來保存密鑰本文主要介紹如何通過native方法調用取出密鑰&#xff0c;以替代原本直接寫在Java中&#xff0c;或寫在gradle腳本中的不安全方式。為什么要這么做 如果需要在本地存儲一個密鑰串&#xff0c;典型的方式有 1. 直接寫在java source code中 2. 寫在gradl…

無代碼iVX編程實現簡單跳躍超級瑪麗游戲

首先咱們打開 iVX 的在線編輯器&#xff1a;https://editor.ivx.cn/ 隨后咱們選擇2D游戲類型制作一個簡單跳躍游戲&#xff1a; 接下來創建幾個圖片&#xff0c;并且添加物體&#xff0c;如圖所示&#xff1a; 在此需要更改對應稱重地面的阻尼值&#xff0c;讓其能夠緩慢降落…