zoukankan      html  css  js  c++  java
  • .NET 黑魔法

    身份认证几乎是每个项目都要集成的功能,在面向接口(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的身份认证机制就做完了,示例代码包含了一些黑魔法,请无视无关代码。

  • 相关阅读:
    数组(Array)的使用方法
    Django中的事务操作
    什么是事务(Transaction)?事务的四个特性以及事务的隔离级别
    0.2 Django + Uwsgi + Nginx 的生产环境部署之实战篇
    0.1 Django + Uwsgi + Nginx 的生产环境部署之理论篇
    linux 进入编辑文件,保存退出相关命令
    Django--restframework
    使用用户名/邮箱/手机号 + 密码登陆 多形式登陆
    Django中异步任务---django-celery
    Redis 常用命令
  • 原文地址:https://www.cnblogs.com/Eysa/p/10118517.html
Copyright © 2011-2022 走看看