OAuth术语一直困扰着我很长一段时间。 OAuth授权是否有人建议或是认证?
如果我错了,请纠正我,但我一直认为授权是允许某人访问资源的行为但OAuth似乎没有任何实际允许访问给定用户的实现资源。所有OAuth实现都在谈论为用户提供令牌(已签名且有时加密)。然后,每次调用后,都会将此令牌传递给后端服务端点,在该端点检查其有效性,同样不是OAuth问题。
OAuth身份验证(每篇文章都说它不是),我认为它要求用户提供凭据,这反过来证明用户应该/不应该访问?
因此,OAuth似乎不是授权NOR身份验证,因为这些必须由其他进程执行。那到底是什么?这是一个传递令牌的过程吗?是不是真的没有特别的含义呢?
在没有听起来神秘和迷信(幽灵和地精)的情况下很难提出关于这个主题的问题所以我希望回答这个问题也不是一件简单的事情。输入您自担风险。
答案 0 :(得分:113)
OAuth 2.0是授权规范,但不适用于身份验证。 RFC 6749,3.1. Authorization Endpoint明确说明如下:
授权端点用于与资源所有者进行交互 并获得授权许可。授权服务器必须首先 验证资源所有者的身份。的方式 授权服务器验证资源所有者(例如,用户名) 和密码登录,会话cookie)超出了这个范围 说明书强>
身份验证处理有关“谁是谁”的信息。授权处理有关“谁授予谁的权限”的信息。授权流程包含身份验证作为其第一步。这是人们常常感到困惑的原因。
有许多库和服务使用OAuth 2.0进行身份验证。它通常被称为“社交登录”,它让人们更加困惑。如果您看到“OAuth身份验证”(而非“OAuth授权”),则使用OAuth进行身份验证是一种解决方案。
OpenID 1.0和OpenID 2.0是旧的身份验证规范。制定规范的人希望人们使用OpenID进行身份验证。但是,有些人开始使用OAuth 2.0进行身份验证(而非授权),并且OAuth身份验证已迅速普及。
从OpenID的角度来看,基于OAuth的身份验证不够安全,但他们不得不承认人们更喜欢OAuth身份验证。因此,OpenID的人决定在OAuth 2.0之上定义一个新的规范 OpenID Connect 。
是的,这让人们更加困惑。
OAuth 2.0 是一个框架,其中服务的用户可以允许第三方应用程序访问他/她在服务中托管的数据,而不会泄露他/她的凭据(ID& amp; ;密码)到应用程序。
OpenID Connect 是OAuth 2.0上的一个框架,第三方应用程序可以获取由服务管理的用户身份信息。
(对不起,这些定义摘自我公司的overview页面)
身份验证是确定最终用户的主题(=唯一标识符)的过程。有很多方法可以确定主题。 ID&密码,指纹,虹膜识别等。
授权是将主题与请求的权限以及请求权限的客户端应用程序相关联的过程。访问令牌代表关联。
答案 1 :(得分:2)
OAuth
不是API或服务:它是authorization
的开放标准,任何人都可以实现。 OAuth是作为对直接authentication pattern
的响应而创建的。
这是OAuth:
How can I allow an app to access my data without necessarily giving it my password?
OAuth演员
OAuth != authentication
OAuth不是身份验证。这是授权协议,或者更好的是委托协议。
身份验证与授权
Authentication
是验证身份(他们说的是谁)的过程
Authorization
是验证允许某人做的事情(权限)的过程