【认证与授权】微服务下的认证与授权
🎫【认证与授权】微服务下的认证与授权
2023-4-14
| 2023-11-4
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password
Sub-item
Last edited time
Nov 4, 2023 08:01 AM
Parent item
领域
认证 (Authentication)和 鉴权/授权 (Authorization)这两个术语代表的功能是不一样的。
notion image
认证是用户在访问系统时,检查用户的身份适合是本系统的合法用户。在这个过程当中验证的是 “你是谁?”
鉴权是系统对通过了身份验证之后的用户进行授权给他访问特定信息(读)或者执行特定的操作(写)的过程。此过程确定了 用户拥有哪些权限

微服务下的认证和授权策略

我可以想到的解决方案有以下这么几种:
  1. 无 API 网关
    1. 每个服务各自为政,各自进行认证和鉴权
    2. 拆分出认证授权服务 进行全局的认证和鉴权
  1. 有 API 网关
    1. 在网关上进行全局的认证,每个服务各自鉴权
    2. 在网关上进行全局的认证和鉴权
    3. 拆分出 认证服务 进行全局的认证,在网关上进行鉴权
用的较多的是 2.c 这种策略,为什么呢?
  1. 认证对于鉴权来说,是频度较低的服务:登陆不常有,鉴权则发生在每一个 API 调用上;
  1. 往往认证会相对复杂,具有特异性,难以做到通用化。而鉴权不会特别复杂,容易做到通用化。

有状态和无状态身份认证

认证方式又两种:有状态认证无状态认证最大的区别就是服务器会不会保存客户端的信息

有状态身份验证

有状态认证,以 cookie-session 模型为例,当客户端第一次请求服务端的时候,服务端会返回客户端一个唯一的标识(默认在 cookie 中),并保存对应的客户端信息,客户端接受到唯一标识之后,将标识保存到本地 cookie 中,以后的每次请求都携带此 cookie,服务器根据此 cookie 标识就可以判断请求的用户是谁,然后查到对应用户的信息。

无状态身份验证

无状态的认证,客户端在提交身份信息,服务端验证身份后,根据一定的算法生成一个 token 令牌返回给客户端,之后每次请求服务端,客户端都需要携带此令牌,服务器接受到令牌之后进行校验,校验通过后,提取令牌的信息用来区别用户。
 
软件开发
  • 认证与授权
  • 网络安全
  • 【缓存】Golang下主从Redis集群搭建及活性检测【在线GO教程】GO高级编程
    目录