【发布时间】:2013-10-02 22:53:39
【问题描述】:
过去几个小时我一直在阅读有关 Oauth2 协议的信息。据我了解,该协议的主要动机是资源所有者不必与第 3 方(客户端)应用程序共享其凭据,而只需与资源服务器共享。
在这篇文章中,我使用了Oauth2 RFC 中定义的角色。但是,我并没有区分资源服务器和授权服务器。为了简单起见,我假设它们是相同的,并将它们称为“资源服务器”。
我可以看到两个不同的事件链。假设这两种情况都是从资源所有者开始的,目的是让客户端访问受保护的资源。
案例一,资源服务器提供的GUI
- 客户端将资源所有者转发到资源服务器的登录页面。
- 资源所有者在资源服务器的 GUI 上提供他/她的凭据。
- 成功后,资源服务器将资源所有者转发给客户端,并向用户客户端提供令牌。
案例2,客户提供的GUI
- 客户端要求资源所有者向其自己的 GUI 提供他/她的凭据。
- 客户端将提供的凭据发送到资源服务器。
- 成功后,客户端获取令牌并访问资源服务器。
我关心的是情况 2。如果客户端不是作为客户端进行身份验证,而是作为资源所有者进行身份验证,那么客户端获得资源服务器上的完全权限会有多难? RFC 声明以下是使用 OAuth2 而不是让客户端处理资源所有者凭据的原因:
“第三方应用程序获得了对资源的过于广泛的访问权限 所有者的受保护资源,使资源所有者没有任何 限制持续时间或访问有限子集的能力 资源。”
RFC 进一步指出:
"需要第三方应用程序来存储资源 所有者的凭据以供将来使用,通常是密码 明文。”
这很可能在情况 2 中由客户端保存。
那么...您能假设实现 Oauth2(情况 2)的客户端比没有实现的客户端更安全吗?资源服务器是否有可能实现防止此类事情发生的机制?
【问题讨论】: