jwt

IdentityServer4(8)- 使用密码认证方式控制API访问(资源所有者密码授权模式)

女生的网名这么多〃 提交于 2020-08-16 06:59:07
一.前言 本文已经更新到 .NET Core 2.2 OAuth 2.0 资源所有者密码模式允许客户端向令牌服务发送用户名和密码,并获取 代表该用户 的访问令牌。 除了通过无法浏览器进行交互的应用程序之外,通常建议不要使用资源所有者密码模式。 一般来说,当您要对用户进行身份验证并请求访问令牌时,使用其中一个交互式 OpenID Connect 流程通常要好得多。 在这里使用这种模式是为了学习如何快速在 IdentityServer 中使用它, 二.添加用户 就像API资源(也称为 Scope)、客户端一样,用户也有一个基于内存存储(In-Memory)的实现。 有关如何正确存储(持久化存储)和管理用户帐户的详细信息,请查看基于 ASP.NET Identity的快速入门。 TestUser 类代表测试用户及其身份信息单元(Claim)。 让我们通过在 config 类中添加以下代码来创建几个用户: 首先添加以下语句 到 Config.cs 文件中: using IdentityServer4.Test; public static List<TestUser> GetUsers() { return new List<TestUser> { new TestUser { SubjectId = "1", Username = "alice", Password =

一文详解密码学中的Hash算法

南楼画角 提交于 2020-08-16 06:52:36
一文详解密码学中的Hash 算法 上一篇 文章 里面,我们介绍了随机数以及随机数中的应用,可以看到密码学中到处都有随机数的身影,这种作为大部分密码学算法的基本组成被称之为 “加密基元“。今天我们一起来看一下另外一个加密基元 - 密码学Hash算法 什么是密码学Hash算法 密码学Hash算法是一个非常重要,而且常见的算法,是计算机密码学中的核心组成部分。密码学Hash算法是指将任何长度的二进制值映射成较短的固定长度二进制值的算法,这个较短的固定长度二进制值就是Hash值。先说一下:这个表述其实不是特别严谨,“任意长度”其实应该是 “算法允许长度范围内的任意长度”,因为有些密码学Hash算法是有输入长度限制的。既然很长的输入可以变成很短的输出,这就像我们写文章之后,需要写一个摘要一样,所以Hash值很多时候也叫做 “消息摘要”, Java中计算密码学Hash值的基类更是直接叫 MessageDigest. 下面代码能够更直观一点,我们来看一些密码学Hash的例子: public static void main ( String [ ] args ) throws NoSuchAlgorithmException { System . out . println ( md5 ( "abcd" ) + " <- abcd" ) ; System . out . println (

项目部署点一下按钮就可以,全流程自动化

纵饮孤独 提交于 2020-08-16 06:12:49
我们平时在开发一些小项目的时候,有快速部署发布的这样的需求,我感觉最智能的方式可能是喊一声“发布”,应用程序就能自动打包发布到服务器上并运行起来。因为项目的规模比较小,我们可能不会应用到DevOps团队。我们希望有一个小工具,帮我们实现应用程序的快速上线。 Alibaba Cloud ToolKit就可以帮助我们就解决这个问题,但是我们还是得打一点小小的折扣,我们无法实现“喊一声”,但是我们可以实现“按一下”就发布应用程序。对于看文档感觉乏味的同学: 点这里,这里有本文对应的操作《视频》 。 第一步:安装IDEA插件Alibaba Cloud ToolKit IDEA File-> Settings-> Plugins->插件市场搜索alibaba-> 安装install Alibaba Cloud ToolKit。 插件安装完成之后,重启IDEA编辑器。 第二步:添加服务器 插件安装完成之后,在IDEA中找到“Alibaba Cloud View” 里面的Host的Tab框。 点击“Add Host”按钮之后弹出如下对话框,添加远程服务器主机IP及用户名密码。 添加完成之后多出一条Host记录 第三步:为服务器添加命令行 将一些在该服务器上经常使用的命令行,固化为command配置 点击command,执行添加命令行操作 对于应用部署,需要使用到如下两个命令行 # 删除历史启动的

[Go] gin-jwt 业务逻辑中使用实例化的 middleware 的方式

纵然是瞬间 提交于 2020-08-16 02:07:07
依然需要按文档所示实例化一个 authMiddleware。 在路由组中使用的方式是 authMiddleware.MiddlewareFunc()。 通过追踪 MiddlewareFunc 可以知道一个大概的处理逻辑。 在具体的业务逻辑代码中,注意依然需要使用同一个 authMiddleware 实例以便使用相同的配置。 调用链是:MiddlewareFunc() -> middlewareImpl() -> GetClaimsFromJWT() 所以在代码中使用 GetClaimsFromJWT 即可,伪代码如下: authMiddleware := middleware.GinJwtMiddleware() _, err := authMiddleware.GetClaimsFromJWT(c) if err != nil { log.Println("no permission") } [Go] gin-jwt 中间件的请求流程与使用思路 Link: https://www.cnblogs.com/farwish/p/12989294.html 来源: oschina 链接: https://my.oschina.net/u/4400968/blog/4295428

python tornado 热加载/自动重启

前提是你 提交于 2020-08-15 23:10:58
热加载这个概念我是在node中体验的,python这么强大的语言怎么会没有热加载呢?抱着这个心态google了一番,发现有的人用supervisor做的热加载,也是醉了,tornado那么大的框架热加载需要这么复杂吗?经过仔细研究发现实现tornado的热加载很简单。 感谢网友的纠正,tornado的并不是真正意义的“热加载”,实时上是监测静态文件的变动触发自动重启服务。 热加载指的是不重启服务,就可以更新服务中的变量和配置文件 如下图,在application构造方法传入debug=True就可以了。 import tornado.ioloop import tornado.web import tornado.autoreload class MainHandler(tornado.web.RequestHandler): def get(self): self.write("python jwt hot load!!!") def make_app(): return tornado.web.Application([ (r"/", MainHandler), ], debug=True) if __name__ == "__main__": app = make_app() port = 3001 print('start listen %d' % port) app

武汉实录|记Guide哥的一次晚餐所见所感

那年仲夏 提交于 2020-08-15 21:43:50
大家好,我是Guide哥,一个三观比主角还正的技术人。 优质文章分类整理 。 时隔一周,Guide 哥又又回来武汉了。 上次来的时间匆忙,只是短暂停留了一下,尚未去下班后和同事们聚餐的地方走走看看,也未曾去周末里和女朋友逛街玩耍的光谷步行街瞧瞧。正琢磨晚饭怎么解决时,想着还是去以前熟悉的店吃饭来促进下消费吧! 乘坐地铁去光谷广场的时候,空荡荡的地铁站里和我等待同一辆车的只有一个低头看手机的大叔,往日里地铁 2 号线是最拥挤的,更别说是周五的晚上了。大家都说武汉是一座年轻人的城市,因为在校大学生人数超过百万,每到周末呀,地铁里熙熙攘攘的年轻人高谈阔论,充斥着阳光的气息。嗯,车来了,Guide 哥走了进去随便找了个座位坐下了。 不得不说,疫情之下,餐饮业和服务业都最受打击。等不来顾客,房租空转,无法转手更不敢开店。平日里热闹的光谷步行街,失去了往日的繁华,陷入了无声的寂静。看到此番场景自己还是挺难受的,心里很不是滋味,不知有多少辛辛苦苦做的一辈子的人因为这场疫情而破产。 光谷作为武汉的交通枢纽,这里的步行街曾经是武汉逛街首选地之一,一二楼服装鞋帽饰品,三四楼美食城影院 KTV 电玩城,无论什么时候,这里都是熙攘交错、人来人往、灯光音乐不止。 而今,它们都仿佛按下了暂停键。沿街隔三岔五关闭的店铺和醒目的转让信息,看的让人心疼。 好了,准备吃饭了。走过一串餐厅

JWT 使用加密算法RS256 非对称加密解密

孤人 提交于 2020-08-15 21:32:16
参考文档: https://gist.github.com/ssippe/8fc11c4d7e766e66f06db0431dba3f0a https://github.com/dvsekhvalnov/jose-jwt https://mac-blog.org.ua/dotnet-core-firebase-jwt/ 需要引用如下包: jose-jwt (version=2.5.0)、BouncyCastle 版本不限 加密和解密方式为:私钥加密、公钥解密 生成私钥、公钥可以利用openssl工具、也可以通过在线上工具生成 私钥: -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMu4IDG1XU6a7bXo 4V1jSnbKk9Eum2WguAyq +maCRcP9JoHlE/ HmhPOjl91aN5gDHw3pgB7QMMkPkuyY 0aG9UiIo7PbBgjXsNBErprKa8G7GKhDN4B3m8jxEi1NLtCk2H8AEf8H / deGFXCde fjQx0NDEDcTbJ8STfbsqrLhOq2xzAgMBAAECgYEAg1kZMNOd8IOFxqb7P2o4ZbUh b1rciL8CS /

asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权

时光怂恿深爱的人放手 提交于 2020-08-15 13:20:40
开发了一个公司内部系统,使用asp.net core 3.1。在开发用户认证授权使用的是简单的cookie认证方式,然后开发好了要写几个接口给其它系统调用数据。并且只是几个简单的接口不准备再重新部署一个站点,所以就直接在MVC的项目里面加了一个API区域用来写接口。这时候因为是接口所以就不能用cookie方式进行认证,得加一个jwt认证,采用多种身份验证方案来进行认证授权。 认证授权 身份验证是确定用户身份的过程。 授权是确定用户是否有权访问资源的过程。 在 ASP.NET Core 中,身份验证由 IAuthenticationService 负责,而它供身份验证中间件使用。 身份验证服务会使用已注册的身份验证处理程序来完成与身份验证相关的操作。 认证-->授权 关于认证授权我们要区分认证和授权是两个概念,具体可查看MSDN官方文档也可以搜索其它文章看看,讲的很多。其中包括OAuth 2.0 以及jwt的相关知识都有很多资料并且讲解的很好。 身份认证 身份验证方案由 Startup.ConfigureServices 中的注册身份验证服务指定: 方式是在调用 services.AddAuthentication 后调用方案特定的扩展方法(例如 AddJwtBearer 或 AddCookie)。 这些扩展方法使用 AuthenticationBuilder.AddScheme

IdentityServer4源码解析_5_查询用户信息接口

最后都变了- 提交于 2020-08-15 07:27:34
目录 IdentityServer4源码解析_1_项目结构 IdentityServer4源码解析_2_元数据接口 IdentityServer4源码解析_3_认证接口 IdentityServer4源码解析_4_令牌发放接口 IdentityServer4源码解析_5_查询用户信息接口 [IdentityServer4源码解析_6_结束会话接口] [IdentityServer4源码解析_7_查询令牌信息接口] [IdentityServer4源码解析_8_撤销令牌接口] 协议简析 UserInfo接口是OAuth2.0中规定的需要认证访问的接口,可以返回认证用户的声明信息。请求UserInfo接口需要使用通行令牌。响应报文通常是json数据格式,包含了一组claim键值对集合。与UserInfo接口通讯必须使用https。 根据RFC2616协议,UserInfo必须支持GET和POST方法。 UserInfo接口必须接受Bearer令牌。 UserInfo接口应该支持javascript客户端跨域访问,可以使用CORS协议或者其他方案。 UserInfo请求 推荐使用GET方法,使用Authorization头承载Bearer令牌来请求UserInfo接口。 GET /userinfo HTTP/1.1 Host: server.example.com

从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十二Swagger(参数)使用二

我与影子孤独终老i 提交于 2020-08-15 07:27:10
   引言   在 上一篇 中提到了 Swagger 的基本使用,仅限于没有参数,没有验证的那种api文档生成,那么这篇就连接上篇继续,在一般具有安全性、权限等验证的接口上,   都会在header/url中加上请求者的秘钥、签名等,当然也有可能添加到body等其它地方, Swashbuckle.AspNetCore 都支持这些写法。    如何使用 -- 下面将介绍两种使用方式 两种方式参数设置到何处都是在 In 属性 上,属性对于值如下: 参考 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#parameter-object query: 参数字段值对应放在url中 header: 参数值对应放在header param中 body: 参数对应放到请求体中 path: 参数应该对应放到请求路径 // 具体貌似没用 formData: 参数对应放到请求表单中    第一种:将一个或多个参数保护API的“securityDefinitions”添加到生成的Swagger中。 这种是直接在文档的右上方添加一个 Authorize 按钮,设置了值后,每一个请求都会在设置的位置上加上相应的值,在 上一篇随笔中的 ConfigureServices 方法中, 对应位置 services