Asp.net 的Security框架除了提供Cookies,OAuth,ActiveDirectory等多个用户认证实现,基本上已经满足业务项目的开发需要了。

当需要实现OAuth2.0服务器端实现的时候第一想法可能是使用IdentityServer3或者4,其实在Security框架中也提供了这样一个简易实现,可以满足我们的需求了,而且代码更加的简洁。在web项目中引入相关nuget包并运行起来,一台OAuth2.0 Server就跑起来了。

核心类就是OAuthAuthorizationServerHandler,总体设计思路就是在该类型中会先判定请求是希望获取AuthorizationCode(这里只讨论授权码模式)还是AccessToken从而执行不同的流程,如果是获取AccessToken的话会判定client_id和redirect_uri正确时候就会返回相应的结果。框架为我们提供了OAuthAuthorizationServerOptions选项参数来配置OAuth2.0.后面所有提到的Options都指该类型。

OAuth2.0在各种操作中会需要传递相应的参数,比如client_id,redirect_uri,response_type之类,框架为我们提供了AuthorizeEndpointRequest类型方便我们根据IOwinRequest提取保存在QueryString里的临时码接口参数,TokenEndpointRequest类型方便我们提取保存在请求Body里的AccessToken接口参数,一切都显得简洁紧凑,避免了一锅粥似得凌乱代码。

1.在请求到来的时候会首先判断请求是否希望获取AuthorizationCode或者AccessToken,如果都不是的话Request请求就不会执行OAuth2.0的代码逻辑。我们可以在OAuthAuthorizationServerOptions配置项的如下两个属性中设置相应的属性。同时框架也为我们提供了一个扩展--Options的MatchesTokenEndpoint来自定义逻辑判断当前请求是否符合OAuth2.0 api接口路径。(我们还可以配置是否只接受https安全连接)

2.如果判断是AuthorizationCode请求的话(默认就是/authorize请求路径),接着确定请求Uri为合法的请求路径,同样的Options参数中也可以设置一些自定义的验证代码,如果一切执行ok,此时我们就需要为Options的Provider属性的OnAuthorizeEndpoint提供如下的一个委托函数,如果我来实现这个OAuth2.0 Server的话,我会在下图的这个委托方法中生成一个随机的code字符串,连同请求Request的state参数(如果有的话)以QueryString参数的形式设置到redirect_uri上,并执行该redirect_uri。这样就能将临时code传递给Application 服务器了。Application服务器获取到该临时code连同其他OAuth2.0规范的参数就可以访问我们的OAuth2.0 Server的AccessToken请求接口了。该AccessToken的Api接口如步骤3。

3.AccessToken接口通常是Application Server在获取到临时Code,带上符合OAuth2.0规范的参数然后发起调用的。如果判断是AccessToken请求的话(默认就是/token请求路径),或许我们需要判定一下请求所携带的client_id和Client_secret是否正确,为了做到这一点,我们需要配置Options的Provider.OnValidateClientAuthentication来进行验证。

如果一切顺利,下面就要生成AccessToken了,框架中生成的AccessToken其实就一个身份信息AuthenticationTicket处理之后生成的一个字符串。如下图所示的Options.AuthorizationCodeProvider.ReceiveAsync(authorizationCodeContext)代码中产生

另外需要注意的是默认产生的AccessToken只有20分钟左右的有效期,这个有效期是必须存在的,我们可以通过配置Options.AccessTokenExpireTimeSpan来配置的长久一些,为了能刷新这个AccessToken必须在其过期之前调用刷新接口。

如果一切执行顺利将会返回如下所示的一个Json字符串

(纯粹是为了下个月找工作而准备的一系列博文,每一篇都尽量精简,并非给初学者看的☺)

Asp.net Security框架(2)的更多相关文章

  1. Asp.net Security框架(1)

    Security框架主要用于身份认证的,基本上所有Asp.net项目有意或者无意的都在使用的,框架的源码包含在Katana项目下. 最常见的使用方式或许就是SignIn来给客户端浏览器生成包含身份信息 ...

  2. ASP.NET Core 框架源码地址

    ASP.NET Core 框架源码地址 https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet  ...

  3. 从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程

    从零开始实现asp.net MVC4框架网站的用户登录以及权限验证模块 详细教程   用户登录与权限验证是网站不可缺少的一部分功能,asp.net MVC4框架内置了用于实现该功能的类库,只需要简单搭 ...

  4. 探索ASP.NET MVC框架之路由系统

    引言 对于ASP.NET MVC的路由系统相信大家肯定不陌生.今天我们就深入ASP.NET的框架内部来看一下路由系统到底是怎么通过我们给出的地址(例如:/Home/Index)解析出Controlle ...

  5. Asp.net MVC5 框架揭秘 S412 实例解析 – 绝妙的扩展 模式的胜利

    Asp.net MVC5 框架是个 开源的,处处可扩展的框架. 蒋先生 在他的这本书里 对如何理解框架,如何扩展框架, 给出了大量的说明和实例. 先上效果图 大部分做传统BS 的同学看到这个页面,脑海 ...

  6. 写自己的ASP.NET MVC框架(上)

    http://www.cnblogs.com/fish-li/archive/2012/02/12/2348395.html 阅读目录 开始 ASP.NET程序的几种开发方式 介绍我的MVC框架 我的 ...

  7. 学习“迷你ASP.NET MVC框架”后的小结

    看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...

  8. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  9. BrnShop开源网上商城第二讲:ASP.NET MVC框架

    在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一 ...

随机推荐

  1. 大数据学习笔记4 - Hadoop的优化与发展(Hadoop 2.0)

    前面介绍了Hadoop核心组件HDFS和MapReduce,Hadoop发展之初在架构设计和应用性能方面仍然存在不足,Hadoop的优化与发展一方面体现在两个核心组件的架构设计改进,一方面体现在Had ...

  2. CentOS7 安装并配置MySQL8.0

    安装环境 linux版本:CentOS 7.6 x64 Mysql:8.0 在CentOS中默认安装有MariaDB,但是我们需要的是MySQL,安装MySQL可以覆盖MariaDB. MariaDB ...

  3. paloalto防火墙执行初始配置

    1.默认情况下,防火墙的 IP 地址为 192.168.1.1,用户名/密码为 admin/admin. 为了安全起见,在继续执行其他防火墙配置任务之前,必须更改这些设置.必须从 MGT 接口(即使计 ...

  4. java数据结构分析

    java数据结构分析 此文章内容参考于:http://www.cnblogs.com/ysocean/ 一.数据结构总览图 1.数组 2.链表 3.栈 4.队列 5.二叉树 6.堆 7.散列 8.红黑 ...

  5. nginx访问502 gateway,*1 connect() failed (111: Connection refused) while connecting to upstream

    安装好nginx,php环境后,配置虚拟主机,结果访问后就报502 gateway,查看日志文件后,显示错误如下: 2019/04/29 16:24:39 [error] 19433#19433: * ...

  6. ArrayList的ConcurrentModificationException异常和多线程下的异常

    一.ConcurrentModificationException ArrayList源码看为什么出现异常: public class ArrayList<e> extends Abstr ...

  7. FastDFS数据存储

    1. 数据存储 在fdfs传一份文件时,通常会返回下面的一串字符,这包含了该文件在服务器端一些存储信息 M00/00/00/wKg4C1tFmTWAFPKBAADdeFFxlXA240.png 下面解 ...

  8. hdfs数据采集场景示意图

  9. HDU6011

    巨香蕉牛奶猪皮怪的坑人,刚开始想错了,我先建了一个结构体储存每个字母的价值和数量,然后全部情况列出来进行计算,就是一次挪动一个字符看总之的变化,但是我原来错在了每次挪动的是全部相同的那一个字符,后来只 ...

  10. mysql & sqlserver语法差异

    isnull   vs   ifnull dateadd  vs date_add limit vs  top