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/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相关推荐
- ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API(二)
在前一篇博文中,我们使用OAuth的Client Credential Grant授权方式,在服务端通过CNBlogsAuthorizationServerProvider(Authorization ...
- AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?
知行EDI系统主要是用来实现贸易双方的数据交换的过程,这个过程中,贸易双方往往需要根据国际通用的消息格式收发信息,我们称符合国际规范的消息文件为EDI报文,然而不同的公司会结合ERP的接口情况选择不同 ...
- 【壹刊】Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API (上)
---------Grant_Allen 是一位博客园新晋博主,目前开始专注于Azure方向的学习和研究,是我认识不多的.打算长时间研究Azure的群友,因此打算帮他开个专栏,同时也希望并祝愿他能一直 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- owin Oauth
原文:http://www.cnblogs.com/richieyang/p/4918819.html 一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前 ...
- python如何调用阿里云接口_python 调用阿里云云解析api添加记录
首先安装阿里云SDK pip install aliyun-python-sdk-core pip install aliyun-python-sdk-alidns 可以配合jenkins传递参数 # ...
- [ASP.NET] 结合Web API在OWIN下实现OAuth
OAuth(Open Authorization) 为用户资源的授权提供了一个安全的.开放而又简易的标准.与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码), ...
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证
原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP. ...
- 【转】在ASP.NET Web API 2中使用Owin基于Token令牌的身份验证
基于令牌的身份验证 基于令牌的身份验证主要区别于以前常用的基于cookie的身份验证,基于cookie的身份验证在B/S架构中使用比较多,但是在Web Api中因其特殊性,基于cookie的身份验证已 ...
最新文章
- 什么是SAP FR?
- GWT与Eclipse集成开发初步研究
- mac11.3成功编译taichi笔记
- 啦啦啦-我又来了!!!
- 字符串 kmp算法解析
- 丽江,是否一群失意的人聚合地
- 操作系统习题解答 (张尧学) 第一章
- [渝粤教育] 西南科技大学 操作系统 在线考试复习资料
- UVa 455 - Periodic Strings
- J1939CANTP
- android开发下载文件损坏解决方法,Android中已下载的.apk文件已损坏
- 函数----ModifyStyle
- android 后台运行管理,Android 后台运行白名单,优雅实现保活
- 保险H5页面、新增模板设计记录
- python自动化弹框_如何使用python自动化处理弹出窗口
- Python socket文件上传下载
- 【Vue.js安装】
- ping服务器网速的工具
- 小说中场景的功能_小说写作 | 如何做好小说中的场景描写?
- 哈尔滨工业大学2022计算机系统大作业
热门文章
- 数据标注丨7大数据标注工具分享
- marlab转C/C+方式的混合编程
- java Swing实现图书管理系统
- 不愁失业!英伟达 CEO 黄仁勋:“AI 让每个人都能成为程序员”
- 电子计算机奏出美妙的交响改为把字句,按要求改写下面的句子. 美妙的琴声陶醉了兄妹俩. 改为被字句: 改为把字句:...
- 计算机存储和进制转换
- Maxwell简介使用
- NEG+SBB指令组合的用处
- Matlab求解优化问题-Yalmip
- AD 2020 入门教程