【问题标题】:Is OAuth 2.0 just for authorizing applications and not users?OAuth 2.0 是否仅用于授权应用程序而不是用户?
【发布时间】:2016-03-26 09:39:30
【问题描述】:

当我第一次听说 OAuth 是在 ASP.NET Web API 应用程序中时,我将它用作授权用户访问 RESTful API 上的资源的方法。到那时我觉得我使用它是正确的,但现在我认为我的想法是错误的,这就是这个问题的主题。

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

当请求的 Authorization: Bearer [token] 标头带有登录页面上的某个用户名发出的令牌时,我知道请求是在“用户登录”的情况下完成的,因此我可以授权访问资源。

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

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

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

【问题讨论】:

    标签: security asp.net-web-api oauth-2.0 authorization identity


    【解决方案1】:

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

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

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

    大多数授权服务器也支持client credentials 授权。在这种情况下,不涉及任何用户,并且预先注册的客户端(应用程序)使用自己的客户端 ID 和密钥向授权服务器进行身份验证。

    使用哪个授权流取决于您使用的客户端类型以及谁拥有客户端需要访问的资源。我描述了my answer here中的差异。

    【讨论】:

    • 感谢@MvdD 的回答。那我的理解是对的吗?当我们将访问令牌与请求一起发送时,我们并不是说 user 有权访问某些请求,而只是说发出请求的 client 已被授权这样做?
    • 正确,客户端由用户授权发出请求。用户拥有资源并授予应用程序访问它的权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多