在这里总结一下工作中遇到的鉴权和授权的方法

① 固定token的方案

通过在nginx或者代码中写死token,或者通过在限制外网访问的方式已来达到安全授权的方式

② session方案

分布式会话方案原理主要是将关于用户认证的信息存储在共享存储中。当用户访问微服务时,用户数据可以从共享存储中获取。

③ 客户端token方案

例如JWT,令牌在客户端生成,由身份验证服务进行签名,并且必须包含足够的信息,以便可以在所有微服务中建立用户身份。令牌会附加到每个请求上,为微服务提供用户身份验证,这种解决方案的安全性相对较好,但身份验证注销是一个大问题,缓解这种情况的方法可以使用短期令牌和频繁检查认证服务等。

④ 第三方授权的方案

遵循OAuth2.0的一种第三方授权,可分为4种模式

⑤ API请求签名

API签名主要使用在系统间进行交互时。采用API签名,第一是保证请求的数据正确性、保证接口安全;第二是识别API调用者的身份。

2,固定token
这是一种偷工减料的方案,在发送请求时,在cookie中带入固定值,在nginx中判断cookie中的值是否正确,如果正确则允许访问服务器,当然这种方案很不安全,在生产环境中不推荐使用。

3,Session认证
用户登录认证成功后,将用户相关数据存储到 Session 中,单体应用架构中,默认 Session 会存储在应用服务器中,并且将 Session ID 返回到客户端,存储在浏览器的 Cookie 中。

如果是在分布式集群中,可以用DB或者类似于Redis的缓存来存储。

4,客户端Token

Token 和 Session ID 不同,并非只是一个 key。Token 一般会包含用户的相关信息,通过验证 Token 就可以完成身份校验。

①,用户输入登录信息,发送身份信息到身份认证服务进行认证

②,在身份认证服务处通过认证,身份认证服务选择用户储存的且自己需要的信息(比如用户id),使用哈希算法通过一个秘钥生成token

③,用户将Token放在HTTP请求头中,发起相关API调用

④,被调用的服务通过调取身份认证服务,验证token权限(认证服务器会通过secret和哈希算法解出信息)

⑤,服务器返回相关资源和数据

在这里我们主要介绍JWT,参考:jwt.io

5,第三方授权

在这里讲的授权遵守OAuth2.0协议,OAuth 是一种开放的协议,为桌面程序或者基于 BS 的 web 应用提供了一种简单的,标准的方式去访问需要用户授权的 API 服务。

OAuth2.0的流程:

(A)用户打开客户端以后,客户端要求用户给予授权。(B)用户同意给予客户端授权。(C)客户端使用上一步获得的授权,向认证服务器申请令牌。(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。(E)客户端使用令牌,向资源服务器申请获取资源。(F)资源服务器确认令牌无误,同意向客户端开放资源。

客户端的授权模式
(1)授权码模式
通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动。例:微信平台

· 用户访问客户端,后者将前者导向认证服务器。
· 用户选择是否给予客户端授权。
· 假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向 URI"(redirection URI),同时附上一个授权码。
· 客户端收到授权码,附上早先的"重定向 URI",向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。
· 认证服务器核对了授权码和重定向 URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。

(2)简化模式
不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤

· 客户端将用户导向认证服务器。
· 用户决定是否给于客户端授权。
· 假设用户给予授权,认证服务器将用户导向客户端指定的"重定向 URI",并在 URI 的 Hash 部分包含了访问令牌。
· 浏览器向资源服务器发出请求,其中不包括上一步收到的 Hash 值。
· 资源服务器返回一个网页,其中包含的代码可以获取 Hash 值中的令牌。
· 浏览器执行上一步获得的脚本,提取出令牌。

· 浏览器将令牌发给客户端。

(3)密码模式
用户向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。

· 用户向客户端提供用户名和密码。
· 客户端将用户名和密码发给认证服务器,向后者请求令牌。

· 认证服务器确认无误后,向客户端提供访问令牌。

(4)客户端模式
· 客户端向认证服务器进行身份认证,并要求一个访问令牌。

· 认证服务器确认无误后,向客户端提供访问令牌。

6,API请求签名
签名过程如下:

· 调用方申请App Key 和 App Secret

· 在生成请求时,使用所有字母顺序排序后拼接的字符串 + App Secret 拼接后进行MD5加密,然后将 App Key, 加密结果追加到请求上。

· 服务收到请求后,根据App Key识别出调用方,然后从字典中查询到对应的App Secret,与请求参数拼接、加密,与请求中的签名进行对比,签名结果相同的为合法请求。

这种签名方式符合上一节提到的使用签名的目的:由于请求的参数会作为签名的一部分,所以请求参数变化后,签名结果一定会随之发生变化,否则将无法认证通过;通过App Key 可以快速识别出API 调用者的身份,而无需与实际业务逻辑掺杂起来

转自:https://blog.csdn.net/sjy8207380/article/details/79232644

.Net 鉴权授权的更多相关文章

  1. WebSocket 的鉴权授权方案

    引子 WebSocket 是个好东西,为我们提供了便捷且实时的通讯能力.然而,对于 WebSocket 客户端的鉴权,协议的 RFC 是这么说的: This protocol doesn’t pres ...

  2. websocket之四:WebSocket 的鉴权授权方案

    引子 WebSocket 是个好东西,为我们提供了便捷且实时的通讯能力.然而,对于 WebSocket 客户端的鉴权,协议的 RFC 是这么说的: This protocol doesn’t pres ...

  3. .NET Core中的鉴权授权正确方式(.NET5)

    一.简介 前后端分离的站点一般都会用jwt或IdentityServer4之类的生成token的方式进行登录鉴权.这里要说的是小项目没有做前后端分离的时站点登录授权的正确方式. 一.传统的授权方式 这 ...

  4. Session, Token, OAuth 鉴权那些事儿

    鉴权那些事 整体思路 无论什么样的服务, Web 服务总是不能绕开鉴权这个话题的, 通过有效的鉴权手段来保护网站数据, 来为特定用户提供服务. 整体来说, 有三种方式: Session-Cookie ...

  5. .NET CORE 鉴权

    基础信息 1.什么是鉴权授权? 鉴权是验证用户是否拥有访问系统的权利,授权是判断用户是否有权限做一些其他操作. 2.传统的Session 和Cookie 主要用于无状态请求下的的用户身份识别,只不过S ...

  6. [原创]SpringSecurity控制授权(鉴权)功能介绍

    1.spring security 过滤器链 ​ spring security中的除了用户登录校验相关的过滤器,最后还包含了鉴权功能的过滤器,还有匿名资源访问的过滤器链,相关的图解如下: 2.控制授 ...

  7. springboot oauth 鉴权之——授权码authorization_code鉴权

    近期一直在研究鉴权方面的各种案例,这几天有空,写一波总结及经验. 第一步:什么是 OAuth鉴权 OAuth2是工业标准的授权协议.OAuth2取代了在2006创建的原始OAuthTM协议所做的工作. ...

  8. 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...

  9. 开放平台鉴权以及OAuth2.0介绍

    OAuth 2.0 协议 OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容. OAuth 2.0 ...

随机推荐

  1. IntelliJ IDEA 2017版 spring-boot搭建拦截器

    1.建立一个springboot-web项目 https://www.cnblogs.com/liuyangfirst/p/8298588.html 2.加入过滤接口 public class Log ...

  2. java 块语句 和引用类型

    1.java中存在块语句,块语句分为四种 1.静态块 2.普通块 3.构造块 4.同步块 静态块的执行时机是在class文件装载的时候;静态块只会执行一次, 多个静态块的时候,按出现顺序执行,存放类的 ...

  3. HDMI之(AVI)Auxiliary Video Information InfoFrame

    这是HDMI协议中关于AVI接口的信息     AVI InfoFrame在H14b中进行了定义.从HDMI 2.0 10.1 Use of the AVI InfoFrame in This Spe ...

  4. 2018-03-17 handler学习使用

    1.handler具体使用https://www.cnblogs.com/JohnTsai/p/5259869.html 2.handlerThread用法https://www.jianshu.co ...

  5. sublime text配置node.js调试

    1. 首先到 nodejs.org 下载 Node.js 安装包并安装.2. 打开 Sublime Text 2 编辑器.选择菜单 Tools --> Build System --> n ...

  6. 一.认识python.变量.数据类型.条件if

    01.万恶之源-python基础 ⼀.python介绍  python的创始⼈为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决⼼ ...

  7. AngularJS 指令中的require

    require参数可以被设置为字符串或数组,字符串代表另外一个指令的名字.require会将控制器注入到其值所指定的指令中,并作为当前指令的链接函数的第四个参数.字符串或数组元素的值是会在当前指令的作 ...

  8. 3.Django视图

    视图 视图接受Web请求并且返回Web响应 视图就是一个python函数,被定义在views.py中 响应可以是一张网页的HTML内容,一个重定向,一个404错误等等 响应处理过程如下图: URLco ...

  9. MacOS统计TCP/UDP端口号与对应服务

    1.TCP端口 echo "### TCP LISTEN ###" lsof -nP -iTCP -sTCP:LISTEN 2.UDP端口 echo "### UDP L ...

  10. 定时任务 Wpf.Quartz.Demo.1

    Quartz 是个开源的作业调度框架. 安装:Install-Package Quartz 官网文档地址:https://www.quartz-scheduler.net/documentation/ ...