详解.NET实现OAuth2.0四种模式(1)

一、OAuth2.0的角色

在OAuth2.0协议中,有4个角色,分别是:

详解.NET实现OAuth2.0四种模式(1)

用户:访问受限制资源的用户。

应用:第三方应用,可能是手机App、Web应用或者桌面程序。

授权服务器:负责用户授权、颁发令牌、管理应用等。

资源服务器:存放受限制资源。

授权服务器和资源服务可以是同一个服务器。

举个例子,我们在“同城交友”这款应用中,需要微信登录并使用微信头像,那么,用户就是我们,应用是“同城交友”,授权服务器就是微信登录授权的服务器,而资源服务器存放了我们微信的头像。

二、一般流程

使用OAuth2.0协议,各角色一般的交互流程是这样的:

详解.NET实现OAuth2.0四种模式(1)

根据应用的特性,认证流程会有一些差异,具体来说会有4种模式。

三、四种模式

OAuth2.0的四种模式包括:授权码模式、密码模式、客户端模式和简化模式(授权码模式的简化,又称隐式授权码)。另外,通过RefreshToken获取令牌的方式也可以作为一种模式。

模式 grant_type 特点
授权码模式 authorization_code 功能最完整、流程最严密的授权模式,但较复杂
密码模式 password 使用用户名/密码作为授权方式从授权服务器上获取令牌,一般不支持刷新令牌。
客户端模式 client_credentials 无用户,用户向客户端注册,然后客户端以自己的名义获取资源
简化模式   令牌容易因为被拦截窃听而泄露,适用于公开的浏览器单页应用
RefreshToken refresh_token  

四、开发准备

在紧接着的章节中,会先介绍在.NET Framework框架中实现OAuth2.0的四种模式。这种实现方式并不支持.NET Core,面向.NET Core的开发在之后讲述。

开发环境:Visual Studio 2019

.NET版本:.NET Framework 4.6

项目模板:ASP.NET Web应用程序(.NET Framework)

在模板选项中,选择一个空的项目即可。

详解.NET实现OAuth2.0四种模式(1)

在开始编码前,我们可以先把NuGet程序包都添加好,没有特殊说明,四种模式的开发都是使用这些库。

NuGet程序包 版本
Microsoft.AspNet.WebApi.Owin 5.2.7
Microsoft.Owin.Host.SystemWeb 4.1.0
Microsoft.Owin.Security.OAuth 4.1.0
Microsoft.Owin.Cors 4.1.0

一般情况下,上述程序包可以使用最新版本。如果出现问题,可使用表格中的版本,经测试没有问题。