OAuth术语一直困扰着我很长一段时间 . OAuth授权是否有人建议或者是身份验证?
如果我错了,请纠正我,但我一直认为授权是允许某人访问资源的行为,但OAuth似乎没有任何实际允许访问给定资源的用户的实现 . 所有OAuth实现都在谈论为用户提供令牌(已签名且有时加密) . 然后,每次调用后都会将此令牌传递给后端服务 endpoints ,在该 endpoints 检查其有效性,同样不是OAuth关注点 .
OAuth身份验证(每篇文章都说不是)我要求用户提供凭据,这反过来证明用户应该/不应该有权访问?
因此,似乎OAuth不是授权NOR身份验证,因为这些必须由其他进程执行 . 那到底是什么?这是一个传递令牌的过程吗?真的没有特别含义的绒毛词吗?
在没有听起来神秘和迷信(幽灵和地精)的情况下很难提出关于这个主题的问题,所以我希望回答这个问题也不是一件简单的事情 . 输入您自担风险 .
1 回答
OAuth是授权规范
OAuth 2.0是授权规范,但不用于身份验证 . RFC 6749,3.1. Authorization Endpoint明确说明如下:
OAuth身份验证?
身份验证处理有关“谁是谁”的信息 . 授权处理有关“谁授予谁的权限”的信息 . 授权流程包含身份验证作为其第一步 . 这是人们常常感到困惑的原因 .
有许多库和服务使用OAuth 2.0进行身份验证 . 它通常被称为“社交登录”,它让人们更加困惑 . 如果您看到“OAuth身份验证”(而非“OAuth授权”),则它是使用OAuth进行身份验证的解决方案 .
OpenID Connect
OpenID 1.0和OpenID 2.0是旧的身份验证规范 . 制定规范的人希望人们使用OpenID进行身份验证 . 但是,有些人开始使用OAuth 2.0进行身份验证(而非授权),OAuth身份验证已迅速普及 .
从OpenID的角度来看,基于OAuth的身份验证不够安全,但他们不得不承认人们更喜欢OAuth身份验证 . 因此,OpenID的人决定在OAuth 2.0之上定义一个新规范 OpenID Connect .
是的,这让人们更加困惑 .
OAuth 2.0和OpenID Connect的一句话定义
OAuth 2.0 是一个框架,其中服务的用户可以允许第三方应用程序访问他/她在服务中托管的数据,而不会向应用程序透露他/她的凭据(ID和密码) .
OpenID Connect 是OAuth 2.0之上的框架,其中第三方应用程序可以获取由服务管理的用户身份信息 .
(对不起,这些定义摘自我公司的概述页面)
从实现者的角度定义
Authentication 是确定最终用户的主题(=唯一标识符)的过程 . 有很多方法可以确定主题 . ID和密码,指纹,虹膜识别等
Authorization 是将主题与请求的权限以及请求权限的客户端应用程序相关联的过程 . 访问令牌表示关联 .
另见
Full-Scratch Implementor of OAuth and OpenID Connect Talks About Findings
Diagrams And Movies Of All The OAuth 2.0 Flows
Diagrams of All The OpenID Connect Flows
The Simplest Guide To OAuth 2.0