OAuth 2.0 只授权应用程序而不授权用户吗?

Is OAuth 2.0 just for authorizing applications and not users?

我第一次听说 OAuth 是在 ASP.NET Web API 应用程序中,我用它来授权用户访问 RESTful [=26= 上的资源].当时我觉得我用对了,但现在我想我的想法是错误的,这就是这个问题的主题。

当时,我通过以下方式使用 OAuth:在 API 上有一个令牌端点来发布令牌。我在 SPA 中创建了一个登录页面,并使用授权类型密码将用户名和密码发布到令牌端点,我开始随每个请求发送返回的令牌。

当请求有 Authorization: Bearer [token] header 以及在登录页面上用某个用户名发出的令牌时,我知道请求正在完成 "with the user logged in" 因此我可以授权访问资源。

深入研究 OAuth 我的结论是我对 OAuth 的使用完全错误。

我现在的理解是OAuth只是授权应用程序而不是用户。在那种情况下,当我们使用 Authorization: Bearer [token] header 发出请求时,我们是在向资源服务器表明发出请求的客户端已被授权访问该资源,但我们并没有说任何关于用户?

在那种情况下,使用 OAuth 我们只能说明客户端应用程序可以访问哪些资源,但我们没有信息来决定用户是否被允许访问该资源?因此,我最初的用法确实是错误的,对吧?

OAuth 2.0 可用于授权客户端(应用程序)调用 API。此授权是通过 authorization grant.

完成的

authorization codeimplicitresource owner password 授权的情况下,资源所有者 通过用户身份验证授予授权使用授权服务器并在同意屏幕上单击接受。

前两个授权流程是交互式的,需要一个理解 HTTP(重定向)响应的代理。

大多数授权服务器也支持 client credentials 授权。在这种情况下,没有用户参与,预注册的客户端(应用程序)使用自己的客户端 ID 和密码向授权服务器进行身份验证。

使用哪个授权流程取决于您使用的客户端类型以及谁拥有客户端需要访问的资源。我在 .

中描述了差异