一、课程介绍

明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性。那么对于我们来说,如何确保数据的安全将是我们需要思考的问题。为了保护我们的WebApi数据接口不被他人非法调用,我们采用身份认证机制,常用的身份认证方式用Https基本认证(结合SSL证书),在ASP.NET WebService服务中可以通过SoapHead验证机制来实现,那么在ASP.NET WebApi中我们应该如何保证我们的接口安全呢?在上此分享课程中阿笨给大家带来了《ASP.NET WebApi 基于分布式Session方式实现Token签名认证》《ASP.NET WebApi 基于JWT实现Token签名认证》。今天阿笨给大家带来另外一种解决方案《ASP.NET WebApi 基于OAuth2.0实现Token签名认证》如果您对本次分享课程感兴趣的话,那么请跟着阿笨一起学习吧。

1.1、本次分享课程包含知识点如下:

1)、对ASP.NET WebApi 如何实现身份认证进一步了解和学习。

2)、掌握.NET中的OAuth2.0 密码模式(resource owner password credentials)的实战项目运用。

3)、.NET开源轻量级HTTP网络请求框架RestSharp在ASP.NET WebApi中的基本运用。

4)、ASP.NET WebAPI自定义HTTP参数绑定支持多参数POST请求。(强烈推荐)

5)、ASP.NET WebApi 基于OAuth2.0实现Token签名认证。(强烈推荐)

1.2、一句话总结:今天我们要解决的问题?

ASP.NET WebAPI如何保证客户端以安全身份认证方式进行访问。

废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运

二、OAuth2.0几种授权模式和场景应用

2.1、什么是OAuth2.0

OAuth2.0是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth2.0致力于使客户端开发者通过更简单的流程为Web应用、桌面应用以及手机客户端等设备进行授权。2012年10月,OAuth2.0协议正式发布为RFC6749。目前各大开放平台,如腾讯、新浪、百度等等也都是以OAuth2.0协议作为支撑。

2.2、OAuth2.0的几种授权类型

 授权许可是表示客户用来获取访问令牌的资源所有者授权的凭证。此规范协议规定了4种授权类型: 

1、授权码模式(authorization code): 标准的Server授权模式,非常适合Server端的Web应用。一旦资源的拥有者授权访问他们的数据之后,他们将会被重定向到Web应用并在URL的查询参数中附带一个授权码(code)。在客户端里,该code用于请求访问令牌(access_token)。并且该令牌交换的过程是两个服务端之前完成的,防止其他人甚至是资源拥有者本人得到该令牌。另外,在该授权模式下可以通过refresh_token来刷新令牌以延长访问授权时间。

2、简化模式(implicit grant type): 该模式是所有授权模式中最简单的一种,并为运行于浏览器中的脚本应用做了优化。当用户访问该应用时,服务端会立即生成一个新的访问令牌(access_token)并通过URL的#hash段传回客户端。这时,客户端就可以利用JavaScript等将其取出然后请求API接口。该模式不需要授权码(code),当然也不会提供refresh token以获得长期访问的入口。

3、 密码模式(resource owner password credentials):这种模式要求用户提供用户名和密码来交换访问令牌(access_token)。该模式仅用于非常值得信任的用户,例如API提供者本人所写的移动应用。虽然用户也要求提供密码,但并不需要存储在设备上。因为初始验证之后,只需将OAuth的令牌记录下来即可。如果用户希望取消授权,因为其真实密码并没有被记录,因此无需修改密码就可以立即取消授权。token本身也只是得到有限的授权,因此相比最传统的username/password授权,该模式依然更为安全。

4、客户端模式(Client Credentials Grant):一种基于APP的密钥直接进行授权,因此APP的权限非常大。它适合像数据库或存储服务器这种对API的访问需求。

2.3、什么场景下会用到OAuth2.0授权

OAuth2.0定义了四种模式,覆盖了所有的授权应用场景:1、授权码模式(authorization code),2、简化模式(implicit),3、密码模式(resource owner password credential ,4、客户端模式(client credentials)

场景一:

目前我们大多数的应用场景,也是我们最熟悉的使用环境就是使用第三方登录,如:微博,QQ,微信,豆瓣等社交平台登录,互联网发展到今天,我们也都习惯了这种登录方式,最大的好处就是便捷,简化了我们一系列的注册流程,还有一大堆帐号密码记不住的困扰,当你碰到一个不支持第三方登录的网站或者应用的时候,第一感觉就是厌恶,一顿喷。人永远离不开社交,所以通过社交平台去登录其他的平台,无疑是最受大家欢迎的方式了 。这种场景下你应该选择模式1

场景二:

你自己实现了一套webApi,想供自己的客户端调用,又想做认证。这种场景下你应该选择模式3或者4,特别是当你的的客户端是js+html应该选择3,当你的客户端是移动端(ios应用之类)可以选择3,也可以选择4。

三、WebApi基于OAuth2.0实现Token签名认证原理讲解

3.1、 基于OAuth2.0实现Token签名认证基本思路如下:

基本流程上是这样的:

●用户使用用户名密码来请求服务器。

●服务器进行验证用户的信息。

●服务器通过验证发送给用户一个token。

●客户端存储token,并在每次请求时附送上这个token值。

●服务端验证token值,并返回数据。


ASP.NET WebApi 基于OAuth2.0实现Token签名认证_.net

基于OAuth实现Token签名认证原理图  


四、WebApi 基于OAuth2.0实现Token签名实战演练分享

Owin集成了OAuth2.0的实现,所以在webapi中使用owin来打造authorization无疑是最简单最方便的方案。

安装Nuget package:
Install-Package Microsoft.AspNet.Identity.Owin 

Install-Package Microsoft.Owin.Security.OAuth 

Install-Package Microsoft.AspNet.WebApi.Owin 

Install-Package Microsoft.AspNet.WebApi.WebHost 

Install-Package Microsoft.Owin.Host.SystemWeb

Install-Package Microsoft.AspNet.Identity.Owin

Install-Package Microsoft.Owin.Cors

Install-Package Microsoft.AspNet.Identity.EntityFramework

ASP.NET WebApi 基于OAuth2.0实现Token签名认证_.net_02

OAuth2.0登录


ASP.NET WebApi 基于OAuth2.0实现Token签名认证_.net_03

Auth2.0主界面


五、课后思考与总结

本次分享课程主要介绍了关于OAuth2.0授权的一些基础知识以及密码模式(resource owner password credentials)的实战项目运用。阿笨后续计划带来讲解OAuth2.0的另一一种比较常用的授权码模式(authorization code)的实战运用。授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与”服务提供商”的认证服务器进行互动。 

最后送大家一句话:希望大家在.NET开发的学习道路上一直跟着阿笨坚持下去吧!