1. 程式人生 > >ASP.NET Web API與Owin OAuth:使用Access Toke呼叫受保護的API(二)

ASP.NET Web API與Owin OAuth:使用Access Toke呼叫受保護的API(二)

在前一篇博文中,我們使用OAuth的Client Credential Grant授權方式,在服務端通過CNBlogsAuthorizationServerProvider(Authorization Server的一個實現)成功發放了Access Token,並在客戶端成功拿到了Access Token。

那Access Token有什麼用呢?在OAuth中對Resource Server(比如Web API)訪問許可權的驗證都是基於Access Token。不管是什麼樣的客戶端來呼叫,Resource Server總是鐵面無私,只認Access Token。

在ASP.NET Web API中啟用OAuth的Access Token驗證非常簡單,只需在相應的Controller或Action加上[Authorize]標記,比如:

複製程式碼
[Authorize]
public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}
複製程式碼

加上[Authorize]之後,如果不使用Access Token,呼叫API時就會出現如下的錯誤:

{"Message":"Authorization has been denied for this request."}

這時你也許會問,為什麼一加上[Authorize]就會有這個效果?原來的Forms驗證怎麼不起作用了?

原因是你在用Visual Studio建立ASP.NET Web API專案時,VS自動幫你添加了相應的程式碼,開啟WebApiConfig.cs,你會看到下面這2行程式碼:

config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

就是這2行程式碼,改變了[Authorize]的作用。

在ASP.NET Web API中啟用OAuth驗證就這麼簡單(簡單的背後是微軟實現了基於OWIN的OAuth,實現原始碼在Katana專案中)。

那在客戶端如何使用Access Token呼叫Web API呢?

也很簡單,只要在http請求頭中加上Bearer:Token即可,客戶端呼叫示例程式碼如下:

複製程式碼
    public class OAuthClientTest
    {
        private HttpClient _httpClient;

        public OAuthClientTest()
        {
            _httpClient = new HttpClient();
            _httpClient.BaseAddress = new Uri("http://openapi.cnblogs.com");
        }

        [Fact]
        public async Task Call_WebAPI_By_Access_Token()
        {
            var token = await GetAccessToken();
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
            Console.WriteLine(await (await _httpClient.GetAsync("/api/values")).Content.ReadAsStringAsync());
        }

        private async Task<string> GetAccessToken()
        {
            var parameters = new Dictionary<string, string>();
            parameters.Add("client_id", "1234");
            parameters.Add("client_secret", "5678");
            parameters.Add("grant_type", "client_credentials");

            var response = await _httpClient.PostAsync("/token", new FormUrlEncodedContent(parameters));
            var responseValue = await response.Content.ReadAsStringAsync();                

            return JObject.Parse(responseValue)["access_token"].Value<string>();
        }
    }
複製程式碼

執行結果如下:

["value1","value2"]

搞定!

ASP.NET Web API與基於Owin實現的OAuth的整合,讓原本複雜的問題變得簡單。

相關推薦

ASP.NET Web APIOwin OAuth使用Access Toke呼叫保護API

在前一篇博文中,我們使用OAuth的Client Credential Grant授權方式,在服務端通過CNBlogsAuthorizationServerProvider(Authorization Server的一個實現)成功發放了Access Token,並在客戶

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 12程式資料備份

索引 簡述 程式檔案備份與資料備份 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。 專案開始

【開源分享入門到精通ASP.NET MVC+EF6+Bootstrap】從這裏開始,一起搭框架1開篇介紹

strong src 擁有 ckeditor 開發 技術分享 mdi 控制 https 框架簡介 這幾年一直在做ASP.NET開發,幾年前做項目都是老老實實一行行的寫代碼,後來發現那些高手基本都會有自己積累起來的代碼庫,現在稱之為開發框架,基礎代碼不用再去堆,

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 10部門管理、崗位管理和員工管理

1 USE [wkmvc_db] 2 GO 3 /****** Object: Table [dbo].[SYS_POST_USER] Script Date: 2016/6/20 16:28:44 ******/ 4 SET ANSI_NULLS ON 5 GO

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 14附資料庫、釋出專案

索引 簡述 總結一 整個系列其實還包括專案管理、考勤簽到、郵件、內部聊天等等,這個東西是做不完的,如果繼續還有新聞系統、靜態生成等等等等.... 其中,靜態頁生成在我的部落格中可以找到,三種方式: 第一種 就是類似網上的很多CMS一樣 採用標籤替換,但這種方式是不推薦的,特別是在我們.Net中,

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 16原始碼分享登入功能以及UI、資料庫、倉儲原始碼分享

1 using Common; 2 using Service.IService; 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Web;

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 15原始碼分享一修改倉儲IRepository、RepositoryBase

1 #region 獲取多條資料操作 2 3 /// <summary> 4 /// 返回IQueryable集合,延時載入資料 5 /// </summary> 6 /// &l

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案9 角色管理,分配許可權

索引 簡述 今天我們來做角色的管理 和 角色許可權分配 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案1搭建MVC環境 註冊區域

索引 簡述 從今天開始,我們從0開始搭建一個框架,並且完成一個任務管理系統的專案。這並不是什麼大專案,只是對於不熟悉MVC以及不熟悉面向介面開發和依賴注入的朋友們有所啟發,因為是從0開始,所以有些地方比較囉嗦,希望大家理解! 希望新手朋友們拋棄“拿來主義”,動手跟著一步一步的做,當做完這個框架和專案

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案6 控制器基類 主要做登入使用者、許可權認證、日誌記錄等工作

索引 簡述 今天我們來寫一個控制器基類 主要做登入使用者、許可權認證、日誌記錄等工作 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案8 許可權管理,自定義許可權,擴充套件許可權

索引 簡述 今天我們來做許可權的管理,這篇比較多 希望新手朋友慢慢消化 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 13客戶管理

索引 簡述 簡單的客戶管理 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。 專案開始 一、資料

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案3公共基礎資料操作類 RepositoryBase

索引 簡述 今天我們寫一個基礎資料的操作類,如果裡面有大家不理解的地方,可採取兩種方式,第一:提出來,第二:會用就行。這個類呢我一般不去修改它,因為基礎操作類,大家也可以直接拷貝到自己的專案中。 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 11檔案管理

索引 簡述 檔案管理,這個比較雞肋 但是有些方法 大家可以參考下 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案4對前面的一些問題彙總和總結

索引 簡述 今天我們對前3章的問題總個彙總,對一些東西做個簡單的總結,相比大家到第3章發現編輯器報了很多錯誤了,不要擔心 那是正常的,因為有很多類庫我還沒有釋出。 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個

【無私分享從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案2建立資料庫和資料模型

索引 簡述 我們建立一個數據庫然後生成資料模型,新增ADO.NET實體資料模型,這裡呢常用的有兩種方式,一種是DbFirst,一種是CodeFirst,為了簡便,我們使用DbFirst。有基礎的朋友可以使用CodeFirst,對專案沒有影響的。 專案準備 我們用的工具是:VS 2013 + Sql

ASP.NET MVC 實現頁落網資源分享網站+充值管理+後臺管理1之資料庫設計

    本文主要講解本專案網站所應用到的知識點,及資料庫的相關設計: 一、知識點     (1)本專案主要採取ASP.NET MVC的程式設計模式,相信你已經瞭解到了MVC的具體含義是什麼,這裡不再贅述,有不瞭解的朋友,可以先

ASP.NET MVC 實現頁落網資源分享網站+充值管理+後臺管理7之擴充套件基類和區域建立以及文字編輯配置

    一、擴充套件基類和區域建立     (1)在應用之前,我們先在表現層建立一個公共的系統擴充套件檔案來(SystemExtension)存放我們需要延伸和擴充套件的方法類。     在常規的專案系統操作中,我們都需要用到

.NET Core的檔案系統[4]由EmbeddedFileProvider構建的內嵌資源檔案系統

一個物理檔案可以直接作為資源內嵌到編譯生成的程式集中。藉助於EmbeddedFileProvider,我們可以統一的程式設計方式來讀取內嵌於某個程式集中的資原始檔,不過在這之前我們必須知道如何將一個專案檔案作為資源並嵌入到生成的程式集中。 [ 本文已經同步到《ASP.NET Core框架揭祕》之中] 目錄一

影象處理計算機視覺基礎,經典以及最近發展4影象處理分析

Last update: 2012-6-3 本章主要討論影象處理與分析。雖然後面計算機視覺部分的有些內容比如特徵提取等也可以歸結到影象分析中來,但鑑於它們與計算機視覺的緊密聯絡,以及它們的出處,沒有把它們納入到影象處理與分析中來。同樣,這裡面也有一些也可以劃歸到計算機視覺中