嗯2

JWT

 

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

下列场景中使用JSON Web Token是很有用的:

Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。
Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens无疑是一种很好的方式。因为JWT可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。

JSON Web Token由三部分组成,它们之间用圆点(.)连接。这三部分分别是:

Header
Payload
Signature
因此,一个典型的JWT看起来是这个样子的:

xxxxx.yyyyy.zzzzz

Header header典型的由两部分组成:token的类型(“JWT”)和算法名称(比如:HMAC SHA256或者RSA等等)。

例如:

{
    'alg': "HS256",
    'typ': "JWT"
}

然后,用Base64对这个JSON编码就得到JWT的第一部分

Payload JWT的第二部分是payload,它包含声明(要求)。声明是关于实体(通常是用户)和其他数据的声明。声明有三种类型: registered, public 和 private。
Registered claims : 这里有一组预定义的声明,它们不是强制的,但是推荐。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
Public claims : 可以随意定义。
Private claims : 用于在同意使用它们的各方之间共享信息,并且不是注册的或公开的声明。 下面是一个例子:
{
    "sub": '1234567890',
    "name": 'john',
    "admin":true
}
对payload进行Base64编码就得到JWT的第二部分

注意,不要在JWT的payload或header中放置敏感信息,除非它们是加密的。
[说明]
 iss: jwt签发者.
 sub: jwt针对的用户
 aud: 校验jwt的一方
 exp: jwt的过期时间,
      过期时间需
	  大于签发时间
 nbf: 定义在什么时间之前
      该jwt是不可用的.
 iat: jwt的签发时间
 jti: jwt的唯一身份
      标识,作一次性
	  token,防重防攻击。
Signature 为了得到签名部分,你必须有编码过的header、编码过的payload、一个秘钥,签名算法是header中指定的那个,然对它们签名即可。 
签名的目的是为了保证上边两部分信息不被篡改
例如: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) 签名是用于验证消息在传递过程中有没有被更改,并且,对于使用私钥签名的token,它还可以验证JWT的发送方是否为它所称的发送方。

 

 

  ·

 

Redis

 

https://www.zhihu.com/tardis/bd/art/487583440?source_id=1001
Redis = Remote Dictionary Server,即远程字典服务。

1 String(字符串)

1.String类型是redis的最基础的数据结构,也是最经常使用到的类型。
  而且其他的四种类型多多少少都是在字符串类型的基础上构建的,所以String类型是redis的基础。
2.String 类型的值最大能存储 512MB,这里的String类型可以是简单字符串、
  复杂的xml/json的字符串、二进制图像或者音频的字符串、以及可以是数字的字符串

应用场景

1、缓存功能:String字符串是最常用的数据类型,不仅仅是redis,各个语言都是最基本类型,因此,利用redis作为缓存,配合其它数据库作为存储层,利用redis支持高并发的特点,可以大大加快系统的读写速度、以及降低后端数据库的压力。

2、计数器:许多系统都会使用redis作为系统的实时计数器,可以快速实现计数和查询的功能。而且最终的数据结果可以按照特定的时间落地到数据库或者其它存储介质当中进行永久保存。

3、统计多单位的数量:eg,uid:gongming count:0 根据不同的uid更新count数量。

4、共享用户session:用户重新刷新一次界面,可能需要访问一下数据进行重新登录,或者访问页面缓存cookie,这两种方式做有一定弊端,

1)每次都重新登录效率低下 2)cookie保存在客户端,有安全隐患。这时可以利用redis将用户的session集中管理,在这种模式只需要保证redis的高可用,每次用户session的更新和获取都可以快速完成。大大提高效率。

2 List(列表)

1.list类型是用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素
2.一个列表当中可以存储有一个或者多个元素,redis的list支持存储2^32次方-1个元素。
3.redis可以从列表的两端进行插入(pubsh)和弹出(pop)元素,支持读取指定范围的元素集,
  或者读取指定下标的元素等操作。redis列表是一种比较灵活的链表数据结构,它可以充当队列或者栈的角色。
4.redis列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。
  意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集。

应用场景

1、消息队列:reids的链表结构,可以轻松实现阻塞队列,可以使用左进右出的命令组成来完成队列的设计。比如:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据。

2、文章列表或者数据分页展示的应用。比如,我们常用的博客网站的文章列表,当用户量越来越多时,而且每一个用户都有自己的文章列表,

而且当文章多时,都需要分页展示,这时可以考虑使用redis的列表,列表不但有序同时还支持按照范围内获取元素,可以完美解决分页查询功能。大大提高查询效率。

3 Set(集合)

1.redis集合(set)类型和list列表类型类似,都可以用来存储多个字符串元素的集合。
2.但是和list不同的是set集合当中不允许重复的元素。而且set集合当中元素是没有顺序的,不存在元素下标。
3.redis的set类型是使用哈希表构造的,因此复杂度是O(1),它支持集合内的增删改查,
  并且支持多个集合间的交集、并集、差集操作。可以利用这些集合操作,解决程序开发过程当中很多数据集合间的问题。

应用场景

1、标签:比如我们博客网站常常使用到的兴趣标签,把一个个有着相同爱好,关注类似内容的用户利用一个标签把他们进行归并。

2、共同好友功能,共同喜好,或者可以引申到二度好友之类的扩展应用。

3、统计网站的独立IP。利用set集合当中元素不唯一性,可以快速实时统计访问网站的独立IP。

数据结构

set的底层结构相对复杂写,使用了intset和hashtable两种数据结构存储,intset可以理解为数组。

4 sorted set(有序集合)

redis有序集合也是集合类型的一部分,所以它保留了集合中元素不能重复的特性,但是不同的是,
有序集合给每个元素多设置了一个分数,利用该分数作为排序的依据。

应用场景

1、 排行榜:有序集合经典使用场景。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。

2、用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。

5 hash(哈希)

  Redis hash数据结构 是一个键值对(key-value)集合,它是一个 string 类型的 field 和 value 的映射表,
redis本身就是一个key-value型数据库,因此hash数据结构相当于在value中又套了一层key-value型数据。
所以redis中hash数据结构特别适合存储关系型对象

应用场景

1、由于hash数据类型的key-value的特性,用来存储关系型数据库中表记录,是redis中哈希类型最常用的场景。

一条记录作为一个key-value,把每列属性值对应成field-value存储在哈希表当中,然后通过key值来区分表当中的主键。

2、经常被用来存储用户相关信息。优化用户信息的获取,不需要重复从数据库当中读取,提高系统性能。


 

  

 

Node.js

 

Node.js入门指南,服务器端JavaScript运行时环境。Node.js是在Google Chrome V8 JavaScript引擎的基础上构建的,它主要用于创建web服务器,但并不局限于此。

Node.js是一个开源的跨平台JavaScript运行时环境。

Node.js应用程序在单个进程中运行,而无需为每个请求创建新的线程。Node.js在其标准库中提供了一组异步I/O标准库,用于防止JavaScript代码阻塞。

当Node.js执行I/O操作时,比如从网络读取、访问数据库或文件系统,而不是阻塞线程和浪费CPU周期等待,Node.js会在响应返回时恢复操作。

这使得Node.js可以在一台服务器上处理数千个并发连接,而不会带来管理线程并发的负担,这可能是一个重要的错误来源。

这样在进行高并发操作时,相对其他语言来说,相同资源下,可提供更高的并发数。

 

const http = require('http');



const hostname = '127.0.0.1';

const port = 3000;



const server = http.createServer((req, res) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'text/plain');

res.end('Hello World\n');

});



server.listen(port, hostname, () => {

console.log(`Server running at http://${hostname}:${port}/`);

});

1、第一行,我们请求的Node.js 的http模块。

2、http.createServer() 方法,我们可以创建一个http服务器并返回它。

3、每当收到新请求时,都会调用请求事件,提供两个对象:一个请求(http.IncomingMessage对象)和一个响应(http.ServerResponse对象)。

4、请求对象我们可命名为req,返回对象,也就是响应对象,我们命名为res

res.statusCode 可设置一个自定义的状态码

res.setHeader 可设置http请求的头部信息

res.end() 可返回请求响应的信息。

5、server.listen() 方法,开始进行监听,开始默认打印console.log()里的内容。

 

 

Event-hub

 

事件中心是一项现代化的大数据流式处理平台和事件引入服务,可与其他 Azure 和 Microsoft 服务(例如流分析、Power BI 和事件网格)以及 Apache Spark 等外部服务无缝集成。 
该服务可在保证低延迟的情况下每秒处理数百万个事件。 发送到事件中心(事件中心实例)的数据可以通过任何实时分析提供程序或者批处理或存储适配器来进行转换和存储。
事件中心中的 Azure 架构注册表提供了一个集中式存储库,用于管理事件流式处理应用程序的架构。

支持实时处理和批处理
实时引入、缓冲、存储和处理流,以获取可行的见解。 事件中心使用分区的使用者模型,可让多个应用程序同时处理流,并允许控制处理速度。 Azure 事件中心还能与 Azure Functions 集成,以构成无服务器体系结构

捕获事件数据
在 Azure Blob 存储或 Azure Data Lake Storage 中近乎实时地捕获数据,以进行长期保留或微批处理

可缩放
使用事件中心可以从 MB 量级的数据流着手,然后逐步扩展到 GB 甚至 TB 量级的处理。

丰富的生态系统
借助适用于行业标准 AMQP 1.0 协议的广泛生态系统以及各种语言(.NET、Java、Python、JavaScript)的 SDK,你可以轻松地从事件中心开始处理流。

事件中心高级层和专用层
事件中心高级层能够满足高端流式处理需求,即在托管的多租户 PaaS 环境中要求更高的性能、更好的隔离性、可预测的延迟和最小的干扰。

借助 Azure Stack Hub 上的事件中心服务,可以实现混合云方案。 支持使用基于流式处理和事件的解决方案进行本地处理和 Azure 云处理。

无论方案是混合(联网)还是离线的,解决方案都支持大规模的事件/流处理。 方案仅受事件中心群集大小的约束,但你可以根据需要预配群集大小。


 

  

 

Service bus

 

Azure 服务总线是一个完全托管的企业消息代理,其中包含消息队列和发布订阅主题(在命名空间中)。 服务总线用于分离应用程序和服务,提供以下优势:

跨争用工作节点实现工作负载均衡
跨服务和应用程序边界安全路由传输数据控制
协调需要高度可靠性的事务性工作

一些常见的消息传送方案包括:

  • 消息。 传输业务数据,例如销售或采购订单、日志或库存变动。

  • 分离应用程序。 提高应用程序和服务的可靠性和可伸缩性。 生产者和使用者不必同时处于联机或可用状态。 负载平衡,使流量高峰不会使服务负担过重。

  • 负载均衡。 允许多个竞争性使用者同间从队列读取内容,每个使用者都安全地获取对特定消息的独占所有权。

  • 主题和订阅。 在发布服务器和订阅服务器之间启用 1:n 关系,使订阅服务器可以从已发布的消息流中选择特定消息。

  • Transactions。 允许你执行多个操作,所有操作都在原子事务的作用域中执行。 例如,可以在事务的作用域中执行以下操作。

    1. 从一个队列获取消息。
    2. 将处理结果发布到一个或多个不同的队列。
    3. 从原始队列移动输入消息。

    仅在成功时才对下游使用者显示结果,包括成功处置输入消息,允许使用一次性处理语义。 对于更大的解决方案上下文中的补偿事务模式,此事务模型是一个可靠的基础。

  • 消息会话。 对于需要严格消息排序或消息延迟的工作流和多路复用传输,实现大规模协调。

 

Blob storage

 

Azure Blob 存储是 Microsoft 提供的适用于云的对象存储解决方案。 Blob 存储最适合存储巨量的非结构化数据。 非结构化数据是不遵循特定数据模型或定义的数据(如文本或二进制数据)。

Blob 存储用于:

  • 直接向浏览器提供图像或文档
  • 存储文件以供分布式访问。
  • 视频和音频进行流式处理
  • 日志文件进行写入。
  • 存储用于备份和还原、灾难恢复及存档的数据
  • 存储数据以供本地或 Azure 托管服务执行分析

Azure 存储服务为应用程序开发人员和 IT 专业人员提供了以下好处:

  • 持久且具有高可用性。 冗余可确保数据在发生短暂的硬件故障时是安全的。 还可以选择在各个数据中心或地理区域之间复制数据,从而在发生本地灾难或自然灾害时提供额外的保护。 以此方式复制的数据在发生意外中断时将保持高可用性。
  • 安全。 该服务会对写入到 Azure 存储帐户的所有数据进行加密。 Azure 存储可以精细地控制谁可以访问你的数据。
  • 可缩放。 Azure 存储设计为可大规模缩放以满足当今的应用程序在数据存储和性能方面的需求。
  • 已托管。 Azure 为你处理硬件维护、更新和关键问题。
  • 易访问。 可以通过 HTTP 或 HTTPS 从世界上的任何位置访问 Azure 存储中的数据。 Microsoft 以各种语言(包括 NET、Java、Node.js、Python、PHP、Ruby、Go 和其他语言)提供了适用于 Azure 存储的客户端库以及成熟的 REST API。 Azure 存储支持通过 Azure PowerShell 或 Azure CLI 运行脚本。 而且,Azure 门户和 Azure 存储资源管理器提供了用于处理数据的简单可视化解决方案。

 

  

 

Catch up 

1 项目经验---尽量说azure相关的

Code1
三方数据-Event Hubs-Blob storage/azure SQL server-azure portal-web application-redis-service bus-message queue
azure devops-scrum management/version control/deployment-environment(development/staging/production-green/blue)

  

2 根据azure经验提问相关问题比如adf integration runtime 是干什么的,logic app 有几种类型,funtion 有几种模式。。。

Integration Runtime是一种用于在本地环境中和云服务之间建立连接的工具。它是Azure Data Factory中的一个组件,用于实现数据的集成和传输。
https://blog.csdn.net/DBA_Huangzj/article/details/122800946
Azure Logic App是一个云平台,在该平台中创建和运行自动化工作流可以几乎不使用代码。 通过使用可视化设计器并从预生成的操作中进行选择,可以快速生成集成和管理应用、数据、服务和系统的工作流。
创建Logic App 有三种方式 界面、VS Code以及VS
  • Azure 服务,例如 Blob 存储和服务总线

  • Office 365 服务,例如 Outlook、Excel 和 SharePoint

  • 数据库服务器,例如 SQL 和 Oracle

  • 企业系统,例如 SAP 和 IBM MQ

  • 文件共享,例如 FTP 和 SFTP


power automate例子:当任一用户上传文件到特定SharePoint站点文件夹,即发送编辑好的特定格式的邮件,通过outlook发送至拥有该文件夹查看权限的所有用户。 

Azure Functions 是一种无服务器解决方案,可以使用户减少代码编写、减少需要维护的基础结构并节省成本。 无需担心部署和维护服务器,云基础结构提供保持应用程序运行所需的所有最新资源。

你可以专注于使用你认为最高效的语言编写最重要的代码,而 Azure Functions 处理其余代码。

  • 存储blob活动,例如在容器中添加或更改数据;
  • 事件枢纽活动,例如用于IoT的流数据;
  • 网络事件,例如HTTP请求或webhooks;
  • Azure Service Bus,以及
  • 计划事件的计时器,类似于Cron job。

  


3 apim相关概念,

Azure API 管理是一种混合式多云管
理平台,适用于所有环境中的 API。 作为平台即服务,API 管理支持完整的 API 生命周
期。
Azure API 管理有助于客户应对以下挑战:
抽象化 API 使用者后端体系结构的多样性和复杂性
安全地将托管在 Azure 上和 Azure 外部的服务公开为 API
保护、加快和观察 API
允许内部和外部用户发现和使用 API

 


  


4什么是rest接口 method 有几种 rest接口命名规则

REST
Representational State Transfer
Method
Get, Put, Post, Delete
修改的方法可以用PUT和PATCH表示,PUT 用于更新资源的全部信息,在请求的 body 中需要传入修改后的全部资源主体,PATCH 用于局部更新,在 body 中只需要传入需要改动的资源字段。
如果一个资源有很多字段,在进行局部更新时,只需要传入需要修改的字段即可,否则在用 PUT 的情况下,你不得不将整个资源模型全都发送回服务器,造成网络资源的极大浪费。 REST API 命名规则

在 REST 架构的链接应该是这个样子:

URL 中不应该出现任何表示操作的动词,链接只用于对应资源;

URL 中应该单复数区分,推荐的实践是永远只用复数;比如GET /api/users表示获取用户的列表;如果获取单个资源,传入 ID,比如/api/users/123表示获取单个用户的信息;

按照资源的逻辑层级,对 URL 进行嵌套,比如一个用户属于某个团队,而这个团队也是众多团队之一;那么获取这个用户的接口可能是这样:GET /api/teams/123/members/234 表示获取 id 为 123 的小组下,id 为234 的成员信息。
按照类似的规则,可以写出如下的接口
/api/teams (对应团队列表)
/api/teams/123 (对应 ID 为 123 的团队)
/api/teams/123/members (对应 ID 为 123 的团队下的成员列表)
/api/teams/123/members/456 (对应 ID 为 123 的团队下 ID 未 456 的成员)
————————————————

标准的格式是

http(s): //server.com /app-name /{version} /{domain} /{rest-convention}

一些其他规范:
规则1:URI结尾不应包含(/)
规则2:正斜杠分隔符(/)必须用来指示层级关系
规则3:应使用连字符( - )来提高URI的可读性
规则4:不得在URI中使用下划线(_)
规则5:URI路径中全都使用小写字母

  

5 什么是oauth 包括概念有几种实现,每种实现分别有几个endpoint

OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。
不管哪一种授权方式,第三方应用申请令牌之前,都必须先到系统备案,说明自己的身份,然后会拿到两个身份识别码:客户端 ID(client ID)和客户端密钥(client secret)。这是为了防止令牌被滥用,没有备案过的第三方应用,是不会拿到令牌的
OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者。…资源所有者同意以后,资源服务器可以向客户端颁发令牌。客户端通过令牌,去请求数据。
OAuth 的核心就是向第三方应用颁发令牌
Authorization Code(授权码模式):正宗的OAuth2的授权模式,客户端先将用户导向认证服务器,认证用户成功后获取授权码,然后进行授权,最后根据授权码获取访问令牌;
前后端分离)1. A向B发送请求,请求授权码,response_type=code,2. B要求用户登录,登录后是否同意授权A,3. 同意授权后,B向A发送授权码,4. A拿到授权码,向B请求令牌,grant_type=authorization_code&
code=AUTHORIZATION_CODE 5. B收到授权码,给A发送令牌,JSON数据(后端获取), 6. A收到令牌,请求信息。
/authorize,请求;/token,刷新,用授权码换token;/revocation,撤销token。 Implicit(隐藏式):和授权码模式相比,取消了获取授权码的过程,直接获取访问令牌;
纯前端)1. A向B发送请求,请求令牌,response_type=token,2. 跳转到B,用户登录,同意授权A,3. B向A发送令牌URL#token=xxxx.
不安全,只能用于一些安全要求不高的场景,并且令牌的有效期必须非常短,通常就是会话期间(session)有效,浏览器关掉,令牌就失效了。
/authorize,请求;URL#token=xxxx,获取token。
Password(密码模式):客户端直接向用户获取用户名和密码,之后向认证服务器获取访问令牌;
1. A要求B的用户名密码,得到后直接向B请求令牌,2. B验证用户名密码后给出令牌到A。这时不需要跳转,令牌放在 JSON,作为 HTTP 回应。
需要用户给出自己的用户名/密码,显然风险很大,因此只适用于其他授权方式都无法采用的情况,而且必须是用户高度信任的应用。
/token,获取token。
Client Credentials(客户端凭证模式):客户端直接通过客户端认证(比如client_id和client_secret)从认证服务器获取访问令牌。
没有前端,用命令行)1. A向B请求,grant_type=client_credentials,2. B通过验证后,直接返回token,3. A获取令牌后,每一条数据请求指令都需带上令牌。
4. 可更新令牌,避免不好的用户体验,请求时会得到两个令牌,一个用于获取数据,一个用于更新令牌,grant_type=refresh_token。
/token,获取token。

OAuth通常有以下几种endpoint:

1. /authorize, 请求token(通过特定的流程flows)

2. /token, 请求token(通过特定的流程flows), 刷新token, 使用authorization code来换取token.

3. /revocation, 吊销token.

https://blog.csdn.net/weixin_47139985/article/details/130109684

  


6 什么是jwt 包括概念,已经jwt和oauth的区别

 

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息该信息可以被验证和信任,因为它是数字签名的
JSON Web Token由三部分组成,它们之间用圆点(.)连接。这三部分分别是:

Header
Payload
Signature
因此,一个典型的JWT看起来是这个样子的:

xxxxx.yyyyy.zzzzz

JWT与OAuth的区别 -OAuth2是一种授权框架 ,JWT是一种认证协议 -无论使用哪种方式切记用HTTPS来保证数据的安全性 -OAuth2用在使用第三方账号登录的情况(比如使用weibo, qq, github登录某个app),而JWT是用在前后端分离, 需要简单的对后台API进行保护时使用。

JWT 是一种认证协议

JWT提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。

OAuth2 是一种授权框架

OAuth2是一种授权框架,提供了一套详细的授权机制。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源


https://config.net.cn/tools/Jwt.html

  

posted on 2023-09-01 16:43  Riusmary  阅读(124)  评论(0编辑  收藏  举报

导航