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. innodb 关键特性(两次写与自适应哈希索引)

    两次写: 场景: 当发生数据库宕机时,可能innodb存储引擎正在写入某个页到表中,而这个页只写了一部分,这种情况被称为部分写失效,如果发生,可以通过重做日志进行恢复,重做日志中记录的是对页的物理操作 ...

  2. 数据结构python编程总结

    大数据.空间限制 布隆过滤器 使用很少的空间就可以将准确率做到很高的程度(网页黑名单系统.垃圾邮件过滤系统.爬虫的网址判重系统等) 有一定的失误率 单个样本的大小不影响布隆过滤器的大小 n个输入.k个 ...

  3. Linux操作系统df相关问题解惑

    1.df 命令无法使用解决办法 问题分析: 1.1 df命令是通过/etc/mtab文件读取已挂载文件系统的信息,因此,df命令无法使用的原因的在于/etc/mtab文件被损坏或者丢失. 查看 mor ...

  4. 笔记之monkey参数(一)

    monkey 参数 参数分类 常规类参数 事件类参数 约束类参数 调试类参数 常规类参数 常规类参数包括帮助参数和日志信息参数.帮助参数用于输出Monkey命令使用指导:日志信息参数将日志分为三个级别 ...

  5. iview组件select无法手动设置值

    听小伙伴说iview的作者已经修复这个bug了,因为我们的组件库是copyiview后修改的,所以没有更新代码 这里提供一个方法 <i-select :ref="'signSlectR ...

  6. Win10系统,开机后提示Desktp不可用的故障解决方法。

    WIN10桌面位置不可用的故障解决方法 今天电脑开机 (Win10系统).桌面空了,然后就蒙了. 系统并弹出以下框,如下图: 原因可能是因为昨天晚上熬夜测试脚本.网上下载的脚本大多都是有毒的.但是人懒 ...

  7. MAC使用超级终端

    其实很简单. 先用ls看看/dev/tty.*哪个是具体的串口,我这里使用的edison的板子,所以插到macos上后可以看到的设备节点为: 只需要使用screen 命令即可,具体的命令格式如下: s ...

  8. HDU1060

    #include <bits/stdc++.h> using namespace std; int main() { int n; long long x; double t,ans; c ...

  9. IDEA debugger模式下启动慢

    很可能是因为代码里面有端点造成的. 点击如下图的重叠红点,找到对应端点点掉就可以了.

  10. Node.js server-side javascript cpu占用高

    也不知道微软咋想的,不搞死我们的电脑不罢休 https://developercommunity.visualstudio.com/content/problem/27033/nodejs-serve ...