身份认证几乎是每个项目都要集成的功能,在面向接口(Microservice)的系统中,我们需要有跨平台,多终端支持等特性的认证机制,基于token的认证方式无疑是最好的方案。今天我们就来介绍下在.Net Core版本中如何做一个自己的身份认证系统。

首先,本篇文章介绍的方式是基于Policy。

我们希望有一个这样的方式来给Controller或Action添加身份认证,将它灵活的添加到我们需要的地方:

请注意高亮的那行代码,我们希望有这样一个Filter,加上它就为这个Action添加了身份认证,Policy可以指定想要的那个认证方式,这里演示一个名为Bearer的策略。

这里代码我们的代码功能分3个部分:

1,将Request Header里的Authorization字段取出并序列化为Administrator对象。

2,判断user的账号密码是否和注入的一致,若一致,添加一个ClaimsPrincipal,mvcContext.HttpContext.User = principal;就是将Request用户赋值给User对象,这样我们在Action里就能以this.User的方式优雅的获取当前登录信息。

3,context.Succeed(requirement); context.Fail();这2行代码就标识请求是否通过了身份验证。

关于微软ClaimsPrincipal系统,我将会在另外一篇文章介绍。

最后,要让我们的BearerTokenHandler起作用,要在Startup里面配置一下:

别忘了在Configure方法里使app使用身份认证:

app.UseAuthentication();

这里IAuthorizationHandler是.Net Core里负责身份认证的接口,我们要实现这个接口以注入我们需要的逻辑。

注意图3里的AddPolicy()方法里,参数值必须和我们Action里调用的一致,否则.Net会找不到我们的策略。另外,在认证系统中,我们需要登录接口,这个接口返回一个token字符串便可,我相信这个对各位来说都没什么难的。

至此,一个完整的基于token的身份认证机制就做完了,示例代码包含了一些黑魔法,请无视无关代码。

.NET 黑魔法 - asp.net core 身份认证 - Policy的更多相关文章

  1. 深入解读 ASP.NET Core 身份认证过程

    长话短说:上文我们讲了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程. 授权是确定用户是否 ...

  2. asp.net core 身份认证/权限管理系统简介及简单案例

    如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...

  3. ASP.NET Core 身份认证 (Identity、Authentication)

    Authentication和Authorization 每每说到身份验证.认证的时候,总不免说提及一下这2个词.他们的看起来非常的相似,但实际上他们是不一样的. Authentication想要说明 ...

  4. ASP.NET Core身份识别

    Introduction to Identity 66 of 93 people found this helpful By Pranav Rastogi, Rick Anderson, Tom Dy ...

  5. ASP.NET Core Token认证

    翻译:Token Authentication in ASP.NET Core 令牌认证(Token Authentication)已经成为单页应用(SPA)和移动应用事实上的标准.即使是传统的B/S ...

  6. 细说ASP.NET Forms身份认证

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

  7. 简单的ASP.NET Forms身份认证

    读了几篇牛人的此方面的文章,自己也动手做了一下,就想有必要总结一下.当然我的文章质量自然不能与人家相比,只是写给从没有接触过这个知识点的朋友. 网站的身份认证我以前只知道session,偶然发现一些牛 ...

  8. IE11下ASP.NET Forms身份认证无法保存Cookie的问题

    IE11下ASP.NET Forms身份认证无法保存Cookie的问题 折腾了三四天,今天才找到资料,解决了. 以下会转贴,还没来得及深究,先放着,有空再学习下. ASP.NET中使用Forms身份认 ...

  9. 关于Asp.Net Forms身份认证

    Asp.Net管道式的构建个我们提供了通过IHttpMoudle来订阅管线事件来达到干预HTTP请求的目的,Asp.Net的身份认证正是通过此种方式来对请求来执行身份认证的,这篇文章仅仅谈论Forms ...

随机推荐

  1. Zabbix unreachable poller processes more than 75% busy

    “Zabbix poller processes more than 75% busy”警报问题解决 虽然Zabbix的监控警报各种有,碰到最多的几个莫过于内存耗尽,网络不通,IO太慢还有这个“Zab ...

  2. GatewayWorker

    GatewayWorker介绍 一.工作原理 Register.Gateway.BusinessWorker进程启动 Gateway.BusinessWorker进程启动后向Register服务进程发 ...

  3. php之print_r

    stdClass类是PHP的一个内部保留类,初始时没有成员变量也没有成员方法,所有的魔术方法都被 设置为null,可以使用其传递变量参数,但是没有可以调用的方法.stdClass类可以被继承. 只是这 ...

  4. 关于数据库DML、DDL、DCL区别

    总体解释:DML(data manipulation language):       它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据 ...

  5. AndrewNG Deep learning课程笔记

    神经网络基础 Deep learning就是深层神经网络 神经网络的结构如下, 这是两层神经网络,输入层一般不算在内,分别是hidden layer和output layer hidden layer ...

  6. Flink - CoGroup

    使用方式, dataStream.coGroup(otherStream) .where(0).equalTo(1) .window(TumblingEventTimeWindows.of(Time. ...

  7. MonkeyRunner_手机触摸屏幕坐标获取

    坐标单位为像素,获取方式包括手机自带.画图软件和photoshop软件. 方式一.android4.0以上系统手机自带坐标功能,在设置->开发者选项->显示指针位置 方式二.画图或phot ...

  8. 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分

    一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...

  9. Magento2与Magento1的区别有哪些

    magento2是15年正式上线的正式版,框架和写法跟magento1有很大区别,用到了命名空间和composer,模块化设计更强.因为是刚出生不久 所以bug比较多.目前全世界做magento2的公 ...

  10. MySQL数据库的权限问题操作及基本增删改查操作

    前面我们讲了mysql的基本内容,现在我们详细的了解一下mysql中的具体操作. what's the SQl SQL(Structured Query Language 即结构化查询语言) SQL语 ...