在前一篇博文中,我们使用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/valuespublic 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的整合,让原本复杂的问题变得简单。

转载于:https://www.cnblogs.com/dudu/p/4572752.html

ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API相关推荐

  1. ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API(二)

    在前一篇博文中,我们使用OAuth的Client Credential Grant授权方式,在服务端通过CNBlogsAuthorizationServerProvider(Authorization ...

  2. AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?

    知行EDI系统主要是用来实现贸易双方的数据交换的过程,这个过程中,贸易双方往往需要根据国际通用的消息格式收发信息,我们称符合国际规范的消息文件为EDI报文,然而不同的公司会结合ERP的接口情况选择不同 ...

  3. 【壹刊】Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API (上)

    ---------Grant_Allen 是一位博客园新晋博主,目前开始专注于Azure方向的学习和研究,是我认识不多的.打算长时间研究Azure的群友,因此打算帮他开个专栏,同时也希望并祝愿他能一直 ...

  4. IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API

    IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...

  5. owin Oauth

    原文:http://www.cnblogs.com/richieyang/p/4918819.html 一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前 ...

  6. python如何调用阿里云接口_python 调用阿里云云解析api添加记录

    首先安装阿里云SDK pip install aliyun-python-sdk-core pip install aliyun-python-sdk-alidns 可以配合jenkins传递参数 # ...

  7. [ASP.NET] 结合Web API在OWIN下实现OAuth

    OAuth(Open Authorization) 为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码), ...

  8. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP. ...

  9. 【转】在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证

    基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的基于cookie的身份验证,基于cookie的身份验证在B/S架构中使用比较多,但是在Web Api中因其特殊性,基于cookie的身份验证已 ...

最新文章

  1. 什么是SAP FR?
  2. GWT与Eclipse集成开发初步研究
  3. mac11.3成功编译taichi笔记
  4. 啦啦啦-我又来了!!!
  5. 字符串 kmp算法解析
  6. 丽江,是否一群失意的人聚合地
  7. 操作系统习题解答 (张尧学) 第一章
  8. [渝粤教育] 西南科技大学 操作系统 在线考试复习资料
  9. UVa 455 - Periodic Strings
  10. J1939CANTP
  11. android开发下载文件损坏解决方法,Android中已下载的.apk文件已损坏
  12. 函数----ModifyStyle
  13. android 后台运行管理,Android 后台运行白名单,优雅实现保活
  14. 保险H5页面、新增模板设计记录
  15. python自动化弹框_如何使用python自动化处理弹出窗口
  16. Python socket文件上传下载
  17. 【Vue.js安装】
  18. ping服务器网速的工具
  19. 小说中场景的功能_小说写作 | 如何做好小说中的场景描写?
  20. 哈尔滨工业大学2022计算机系统大作业

热门文章

  1. 数据标注丨7大数据标注工具分享
  2. marlab转C/C+方式的混合编程
  3. java Swing实现图书管理系统
  4. 不愁失业!英伟达 CEO 黄仁勋:“AI 让每个人都能成为程序员”
  5. 电子计算机奏出美妙的交响改为把字句,按要求改写下面的句子. 美妙的琴声陶醉了兄妹俩. 改为被字句: 改为把字句:...
  6. 计算机存储和进制转换
  7. Maxwell简介使用
  8. NEG+SBB指令组合的用处
  9. Matlab求解优化问题-Yalmip
  10. AD 2020 入门教程