在介绍WebApi这个小demo前,先来简单说一下OAuth这个东西。

OAuth开放授权,用户可以对自己的资源进行第三方授权,那么第三方就可以不用你的账号密码就可以访问你授权的资源了。比如一些论坛直接用qq账号登陆、微信公众号等,都是OAuth的应用体现。

这里的WebApi的demo也是一样,用户只有获得授权token才能访问api,有人对这个token比较好奇,然而OAuth2.0并没有介绍token的算法,只是介绍了如何使用,Google、Twitter倒是明确说明使用了这种Bearer Token,当然也可以自己写token。

Bearer Token用的Base64的编码格式,它有个Bearer的前缀,形式如下:

Bearer kki94xl28AsVujf-j_sXNtX6Ybd-O0iFoIZZbdn22zcLQvwlEWcvfRLQh2PTz_PsbNKQbeekWetJ01gAjtBBC8f3FB4BqTuRvQiG0cM48LLq3oAxJpuFD0TKJnWmf5mrCMFBu45mbonD2-v_qJIPgh0YLcXb6Hl0qCo4nf_gwY11wiuj-xsUf8lNLLPg4MZeLmTLx-yEHnf_HtZ-4FCsLWiCVmWHTTvbLP5fgnmRCd5xFx-Nq-w0wqtEs3ttN6TJum7fFRpfsfTCYV768nm14EgHm2xAkYp8elvT0Etv-IibuNjjoEV9TwyzOPSEBL6i1RQ0QsM0_-KwCvLOVe9h3lXHrC6Z2FimQOJBfMe80jbAAlD3tb3XdQumICVrSrFDTPsxkOWirCe-p5ah3tXLUq2a4f_E_ClEWdLBVCbrmVnC5ljZBp7yGDO8wx2RX3ZquvzQpiYzk9I6L-wQrky1Mmugt__9HJPw0rL8iWccYT3q3oYsTOz6Cr_sbr7Z6q6O

那么拿到的token之后,可以用http请求resource,header如下:

GET /resource HTTP/1.1
Authorization: Bearer ...
Host: ...

ok,上面只是简单介绍了下OAuth,并不涉及OAuth的框架原理,有兴趣看一下官方的doc。

言归正传,我们先用vs建立一个名为WebApiDemo的project。

我们看一下controller:

AccountController: 登陆用户操作

ValuesController: api操作

我们调试一把project,到达API页签下。这里列出了以上Controller的用户和api的操作部分。

我们准备试一下API标签下列出的register用户的api。这里我们用到了一个Fiddler的http debug工具。

我们在框框里填入一些测试数据。

看一下调试结果,双击一下左侧的栏目。看到http表单提交返回结果ok。

我们再回到解决方案,看到project自动创建了一个WebApiDemo前缀的express db,如图看到已经录入了我们的测试数据。

数据库的连接在web.config也可以作修改。

看一下project的startup.cs定义了token验证的server地址。

尝试获取一个token。注意下头文件。

返回结果。复制一下这个server分配的token。

我们用这个token去验证一下api。

头文件。

结果,ok返回了两个字符串。token验证成功。

我们把token抹去,再次测试一下,发现api报了一个401的错误。

ok,以上就是一个简单的针对微软web api这块的介绍,另外有关于资源授权、Resources Server、Authorization Server和Client的搭建,OAuth也提供了相应的解决方案,想好好理解oauth有必要看看它的文档,有关于.net这块,可以去github看一下dotnetopenauth。

最新文章

  1. Jquery实现简单到计时功能(setTimeout,setInterval)
  2. Linux snmp监控
  3. Think Python - Chapter 03 - Functions
  4. oracle修改process和session数
  5. Extjs 4.2.0 MVC 架构
  6. JavaScript进阶学习的一些建议
  7. SQL开发中容易忽视的一些小地方(五)
  8. 联网html引用BootStrap
  9. BZOJ4403 序列统计—Lucas你好
  10. 【Unity Shaders】Shader中的光照
  11. 美团2017年CodeM大赛-初赛B轮-黑白树
  12. layui从子iframe打开父iframe的tab选项卡
  13. Nacos系列:基于Nacos的配置中心
  14. 洛谷4556 [Vani有约会]雨天的尾巴
  15. Docker:Containers
  16. Mybatis中int insertSelective()的相关问题
  17. angular上传获取图片的directive指令
  18. Android 引用库项目,Debug 库项目
  19. Channel Allocation HDU1373
  20. 稳定模式在RESTful架构中的应用

热门文章

  1. 【BootStrap】 基础
  2. 关于Datagridview控件用法的一些总结(设置列chicun)
  3. Intellij Idea使用技巧、快捷键
  4. 关于hql一些不常见但好用的技巧(个人总结)
  5. mysql提示2002错误的解决方法
  6. Thrift中实现按照时间戳范围操作Hbase数据
  7. Android(Xamarin)之旅(四)
  8. Intellij Idea 12 开发Android 报Caused by: java.lang.UnsatisfiedLinkError: FindLibrary return null;
  9. Eclipse安装配置以及java项目和类的创建
  10. 【kd-tree】bzoj2850 巧克力王国