CZGL.Auth

发现有Bug,会导致只能有一个用户登录,无法多个用户同时登录。

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。

打算好好优化一下,周六周日修改Bug,做好测试再放出来,哈哈哈哈哈哈哈哈哈哈哈哈哈。

新版本开源地址:https://github.com/whuanle/CZGL.Auth

我的代码太渣了,大佬们指点一下。

CZGL.Auth 是一个基于 Jwt 实现的快速角色授权库,ASP.Net Core 的 Identity 默认的授权是 Cookie。而 Jwt 授权只提供了基础实现和接口,需要自己实现角色授权和上下文拦截等。

使用第三方开源类库,例如 IdentityServer4 ,过于复杂,学习成本和开发成本较高。

于是空闲时间,写了这个库。

  • 基于角色授权
  • 每个API均可授权
  • 实时更新权限
  • 快速配置

使用方法:

Nuget 中搜索 CZGL.Auth ,安装 1.0.0版本,适用于 ASP.NET Core 2.x。

注入服务

在 Startup.cs 中

using CZGL.Auth.Services;

ConfigureServices 中,注入服务

            services.AddRoleService();

配置服务

在 Program 文件中创建一个方法,在启动网站前配置角色授权服务:

使用 AuthBuilder 可以配置授权认证的配置

引入

using CZGL.Auth.Services;
using CZGL.Auth.Models;
using CZGL.Auth.Interface;

你可以像这样快速配置:

            new AuthBuilder()
.Security()
.Jump()
.Time(TimeSpan.FromMinutes(20))
.DefaultRole("user")
.End();
// 无需接收返回值,直接这样写即可

Security 中配置 密钥、默认用户的角色、Token颁发者、Token订阅者。

​ 密钥应当使用私钥证书的文本内容;请设定一个无用的默认角色或者乱填一个无用的字符串,在认证失效或其它原因是,会使用此角色;这个默认角色是存放在系统中的。

Jump 中填写登录URL、无权访问时跳转URL和是否开启跳转功能。

如果不开启,则在失败时直接返回 401 ;如果开启,在用户没有登录或凭证已经失效时,会跳转到相应页面。

Time 中填写凭证失效的时间,即颁发的凭证有效时间,可以以分钟、秒为单位。一般都是设置20/30分钟。

DefaultRole 设置默认角色,这个默认角色是给为登录或凭证失效时设置,或者颁发凭证后系统删除了这个角色等使用。乱填就行,不要跟真正的用户角色名称一致即可。

角色授权

使用 RolePermission.AddRole() 可以增加一个角色,

            var usera = new Role()
{
RoleName = "supperadmin",
Apis = new List<IApiPermission>
{
new ApiPermission{Name="A",Url="/api/Test/A" },
new ApiPermission{Name="AB",Url="/api/Test/AB" },
new ApiPermission{Name="AC",Url="/api/Test/AC" },
new ApiPermission{Name="ABC",Url="/api/Test/ABC" }
}
};
            RolePermission.AddRole(usera);

RoleName :角色名称

Apis:角色能够访问的API

IApiPermission:一个API,Name API名称,Url API地址。

校验角色和API地址时,不区分大小写。

角色会存储到内存中,你可以随时添加或删除角色。例如从数据库中读取权限存储到系统中。

为了安全和避免同步问题,只允许以角色为单位操作。

RolePermission 中可以添加或删除角色。

登录、颁发凭证

创建 AccountController API控制器

        private readonly AuthorizationRequirement _requirement;
public AccountController(AuthorizationRequirement requirement)
{
_requirement = requirement;
}

如果你不是用 AuthorizationRequirement 注入,那么颁发的会是上面设置的默认用户,这可能会导致授权问题。

登录:

        [HttpPost("Login")]
public JsonResult Login(string username, string password)
{
// 中数据库中判断账号密码是否正确,并获取用户所属角色等角色
var user = UserModel.Users.FirstOrDefault(x => x.UserName == username && x.UserPossword == password); if (user == null)
return new JsonResult(
new ResponseModel
{
Code = 0,
Message = "登陆失败!"
}); // 实例化加密和颁发 Token的类
EncryptionHash hash = new EncryptionHash(); // 将用户标识存储到系统中
_requirement.SetUserRole(user.Role); //// 配置用户标识
//// 方法一
//var userClaims = new Claim[]
//{
// new Claim(ClaimTypes.Name,user.UserName),
// new Claim(ClaimTypes.Role,user.Role),
// new Claim(ClaimTypes.Expiration,DateTime.Now.AddMinutes(TimeSpan.FromMinutes(20)).ToString()),
//}; // 方法二
var userClaims = hash.GetClaims(username, user.Role); // 颁发 token
var identity = hash.GetIdentity(userClaims);
var jwt = hash.BuildJwtToken(userClaims);
var token = hash.BuildJwtResponseToken(jwt); return new JsonResult(
new ResponseModel
{
Code = 200,
Message = "登陆成功!请注意保存你的 Token 凭证!",
Data = token
});
}

CZGL.Auth: ASP.NET Core Jwt角色授权快速配置库的更多相关文章

  1. ASP.NET Core JWT认证授权介绍

    using JWTWebApi.Models; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetC ...

  2. ASP.NET Core 认证与授权[5]:初识授权

    经过前面几章的姗姗学步,我们了解了在 ASP.NET Core 中是如何认证的,终于来到了授权阶段.在认证阶段我们通过用户令牌获取到用户的Claims,而授权便是对这些的Claims的验证,如:是否拥 ...

  3. ASP.NET Core 认证与授权[7]:动态授权

    ASP.NET Core 中基于策略的授权旨在分离授权与应用程序逻辑,它提供了灵活的策略定义模型,在一些权限固定的系统中,使用起来非常方便.但是,当要授权的资源无法预先确定,或需要将权限控制到每一个具 ...

  4. asp.net core 3.x 授权中的概念

    前言 预计是通过三篇来将清楚asp.net core 3.x中的授权:1.基本概念介绍:2.asp.net core 3.x中授权的默认流程:3.扩展. 在完全没有概念的情况下无论是看官方文档还是源码 ...

  5. asp.net core 3.x 授权默认流程

    一.前言 接上一篇<asp.net core 3.x 授权中的概念>,本篇看看asp.net core默认授权的流程.从两个方面来看整个授权系统是怎么运行的:启动阶段的配置.请求阶段中间件 ...

  6. 聊聊 asp.net core 认证和授权

    使用asp.net core 开发应用系统过程中,基本上都会涉及到用户身份的认证,及授权访问控制,因此了解认证和授权流程也相当重要,下面通过分析asp.net core 框架中的认证和授权的源码来分析 ...

  7. ASP.NET Core 认证与授权[6]:授权策略是怎么执行的?

    在上一章中,详细介绍了 ASP.NET Core 中的授权策略,在需要授权时,只需要在对应的Controler或者Action上面打上[Authorize]特性,并指定要执行的策略名称即可,但是,授权 ...

  8. [转]三分钟学会.NET Core Jwt 策略授权认证

    [转]三分钟学会.NET Core Jwt 策略授权认证 一.前言# 大家好我又回来了,前几天讲过一个关于Jwt的身份验证最简单的案例,但是功能还是不够强大,不适用于真正的项目,是的,在真正面对复杂而 ...

  9. Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

    一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...

随机推荐

  1. 【题解】【合并序列(水题)P1628】

    原题链接 这道题目如果连字符串的基本操作都没学建议不要做. 学了的很简单就可以切,所以感觉没什么难度- 主要讲一下在AC基础上的优化(可能算不上剪枝) 很明显,这道题我们要找的是前缀,那么在字符串数组 ...

  2. tomcat不需要重启热部署xml文件

    项目中,遇到情况,有时候增加struts的配置了,有时候粗心改错了,然后急需要发布线上吧,又不能重启影响其他的,最后发现struts有这个功能呢! 在struts.xml的配置文件中加上一句话就行 & ...

  3. [USACO07FEB]银牛派对Silver Cow Party

    题目简叙: 寒假到了,N头牛都要去参加一场在编号为X(1≤X≤N)的牛的农场举行的派对(1≤N≤1000),农场之间有M(1≤M≤100000)条有向路,每条路长Ti(1≤Ti≤100). 每头牛参加 ...

  4. Android问题解决

    1.clean之后R文件消失 clean之后R文件消失是因为布局的XML文件存在错误,无法编译你的资源文件,所以无法自动生成R文件,在Problem.LogCat等界面查看错误的原因,把错误改正即可: ...

  5. Excel催化剂开源第24波-较VBA更强大的.Net环境的正则表达式

    在VBA上可以调用正则表达式库,从而编写正则表达式自定义函数,这个相信不少VBA开发者已经熟知,但VBA的VBScript正则表达式库毕竟是一个过时的产品,不像.Net那样是与时俱进的,所以两者实现出 ...

  6. [AOP拦截 ]SpringBoot+Quartz Aop拦截Job类中的方法

    ​ 最近在工作使用boot+quartz整合,开发定时调度平台,遇到需要对Quartz的Job进行异常后将异常记录到日志表的操作,第一反应就想到了使用Spring的AOP,利用AfterThrowin ...

  7. 《C# 语言学习笔记》——目录

    C# 简介 变量和表达式 流程控制 3.1 布尔逻辑 3.2 goto语句 3.3 分支 3.4 循环 变量的更多内容 4.1 类型转换 4.2 复杂的变量类型 4.3 字符串的处理 函数 5.1 定 ...

  8. Linux下gcc编译器的使用

    例:gcc -x -g c helloC -o firstC -x:改变gcc的行为.(注:如果是.c文件则不用加-x) -x c :编译c程序 -x c++ :编译c++程序 -x java :编译 ...

  9. golang从context源码领悟接口的设计

    注:写帖子时go的版本是1.12.7 go语言中实现一个interface不用像其他语言一样需要显示的声明实现接口.go语言只要实现了某interface的方法就可以做类型转换.go语言没有继承的概念 ...

  10. #!/usr/bin/env bash和#!/usr/bin/bash的比较

    #!/usr/bin/env bash和#!/usr/bin/bash的比较 stackoverflow: http://stackoverflow.com/questions/16365130/th ...