DOIFOR技术手搓认证授权服务:知识准备
DOIFOR技术手搓认证授权服务:知识准备

手搓认证授权服务:知识准备

技术

认证与授权

咱们在做用户登录的时候经常会涉及认证和授权这两个词语,但是经常会把两者混为一谈。那是因为我们做系统开发的时候虽然经常使用到用户登录这个功能,但是却很少会深入了解其中原理,更多的时候就是判断当前系统是否登录?是谁登录的?能做什么?

上面的问题其实就涉及认证和授权两个行为了:
认证(Authentication):解决的是“我是谁?”的问题。
授权(Authorization):解决的是“我能干什么?”的问题。

常用的认证方式有:

  • 身份证
  • 用户名和密码
  • 用户手机:手机短信、手机二维码扫描、手势密码
  • 用户的电子邮箱
  • 基于时间序列和用户相关的一次性口令
  • 用户的生物学特征:指纹、语音、眼睛虹膜
  • 用户的大数据识别
  • 等等

认证、授权、鉴权和权限控制概念区别

TOTP: Time-Based One-Time Password Algorithm

HOTP: An HMAC-Based One-Time Password Algorithm

Web Authentication API

什么是WebAuthn:在Web上使用Touch ID和Windows Hello登录

关于授权主要围绕“权”来进行交互,涉及四个概念:

  • 资源:在法律上又叫标的,这就权的对象。可以是某个restful接口、音乐、视频、网络端口号等等一切客观事物。
  • 权限:比如对某个接口的调用权限,对文本的读取和修改权限等等,一般来说对应着一组操作。
  • 资源所有者:就是拥有该资源“所有权”的人或组织,可以将权限进行拆分、分配等。
  • 资源执行者:被赋予资源部分权限,并执行该权限(操作)的人或组织。

单点登录SSO

我最早接触单点登录是CAS,其原理主要如下:
file

CAS(中央认证服务)_百度百科

单点登录解决的问题主要偏向于“认证”,对于“授权”几乎没有涉及。咱们可以将上节中列举的那些认证方式都集成进去,包括第三方登录等,单点登录最终产物是一个token。

当然单点登录还有其他的一些协议,比如SAML等:单点登录协议有哪些?CAS、OAuth、OIDC、SAML有何异同?

详解JWT和Session,SAML, OAuth和SSO

什么是OAuth2.0

OAuth2.0是一种授权协议!并不是认证协议!

理解OAuth 2.0

OAuth2.0重点需要理解的是几个概念:

  • 用户:一般来说就是登录用户
  • 客户端(资源执行者):就是被授权对象,比如说我们开发了一个系统A,接入了google的oauth2.0服务,系统A就是资源执行者,用户授权系统A使用资源服务器提供的某些资源。
  • 认证服务器: 上衣节中提到的CAS就是一种认证服务器,用户需要现在授权服务器上登录,也就是说资源所有者先要登录才能给客户端授权
  • 授权服务器:就是google,主要提供OAuth2.0的相关服务
  • 资源服源服务器:客户端将要访问的资源

然后还有需要理解OAuth2.0的四种授权模式:

  • 授权码模式(authorization code)
  • 简化模式(implicit)
  • 密码模式(resource owner password credentials)
  • 客户端模式(client credentials)

关于token和refreshToken,一般来说token的有效期都尽可能的设置短一些,refreshToken的有效期稍微长一些。token主要用于访问各种资源,refreshToken仅用于更换token。

什么是OIDC (OpenID Connect)

OpenID Connect简称OIDC,是基于OAuth2.0扩展出来的一个协议。除了能够OAuth2.0中的Authorization场景,还额外定义了Authentication的场景。也就是说OIDC即是认证协议,也是授权协议。

如何通过 OIDC 协议实现单点登录?[通俗易懂]

关于授权认证方面的知识点可以翻阅Authing的文档:OIDC 与 OAuth2.0 综述

file

LDAP(Lightweight Directory Access Protocol)

我一直将LDAP与关系性数据库做比较,不明白为什么有了关系数据库还需要LDAP,这就需要多了解一下他们的区别了。

LDAP和关系数据库是两种不同层次的概念,后者是存贮方式(同一层次如网格数据库,对象数据库),前者是存贮模式和访问协议。 LDAP是一个比关系数据库抽象层次更高的存贮概念,与关系数据库的查询语言SQL属同一级别。 LDAP最基本的形式是一个连接数据库的标准方式。 该数据库为读查询作了优化。 因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多。 从另一个意义上 LDAP是实现了指定的数据结构的存贮,它是一种特殊的数据库。

什么是轻量级目录访问协议(LDAP)身份验证?

ldap介绍

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注