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

① 固定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. 查阅Springboot官方文档方式----------------Springboot2.0.2最新稳定版

    1.登录官方网址: https://spring.io/ 如图所示: 2.选择PROJECTS,就可以看到spring所有的相关项目了. 点开后:其中就包括了Spingboot 3.版本选择,红圈部分 ...

  2. java学习路线图(2018年最新版)

    最近有些网友问我如何自学 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,导致想学,但又很迷茫,不知从 ...

  3. Arria10中的IOPLL与fPLL

    最近在用Arria10.从480降到270的过程中,IOPLL出现问题,大概是说几个Bank的IOPLL已经被占用,没有空间再给别的IOPLL去适配. 因为在工程中,所用的PLL多达35个之多,其中明 ...

  4. sas和ssd盘写入数据效率对比

    表结构如下: CREATE TABLE `tab_AAA` (  `id` bigint(20) NOT NULL AUTO_INCREMENT ,  `customer_no` varchar(32 ...

  5. C++ dynamic_cast 的使用

    C++中的dynamic_cast 执行运行时刻类型转换,起作用有点类似于Java当中的instance of reference:http://www.cnblogs.com/chio/archiv ...

  6. SSH 等效性问题 总提示输入密码问题

    家目录权限问题 .chmod 700 /home/.. 得到的教训就是没事儿不要乱修改家目录权限,一时方便,可能在别的地方载跟头 ~~ 浪费好许时间 哎

  7. Swift3翻天覆地的改变

    经历了从swift 1.0 到2.0,一个版本之后代码居然就不兼容了.这如何在团队推广呢?没有想到3.0居然变化更加的大.有多大,来体会一下: UIFont.preferredFontForTextS ...

  8. 20170905工作日记--listview优化大全

    1. 适配器设计模式 实例描述:我们国家的电器使用普通的扁平两项或三项插头,而去外国的话,使用的标准就不一样了,比如德国,使用的是两项圆头的插头,那么我们使用的手机充电器插头无法插到德国的插排中去,那 ...

  9. java基础-day18

    第07天 集合 今日内容介绍 u  HashSet集合 u  HashMap集合 第1章   HashSet集合 1.1  Set接口的特点 Set体系的集合: A:存入集合的顺序和取出集合的顺序不一 ...

  10. Django URLs error: view must be a callable or a list/tuple in the case of include()

    Django 1.10 no longer allows you to specify views as a string (e.g. 'myapp.views.home') in your URL ...