Authentication in .NET Web Api
在介绍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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构