Oauth 2.0 Oauth2如何保护资源所有者?

Oauth 2.0 Oauth2如何保护资源所有者?,oauth-2.0,oauth2client,Oauth 2.0,Oauth2client,在过去的几个小时里,我一直在阅读Oauth2协议。据我所知,此协议的主要动机是资源所有者不必与第三方(客户端)应用程序共享其凭据,只需与资源服务器共享 在本文中,我使用了中定义的角色。但是,我没有区分资源服务器和授权服务器。为了简单起见,我假设它们是相同的,并将它们称为“资源服务器” 我可以看到两个不同的事件链。假设这两种情况都从资源所有者开始,目的是让客户端访问受保护的资源 案例1,资源服务器提供的GUI 1.客户端将资源所有者转发到资源服务器的登录页。 2.资源所有者在资源服务器的GUI上提

在过去的几个小时里,我一直在阅读Oauth2协议。据我所知,此协议的主要动机是资源所有者不必与第三方(客户端)应用程序共享其凭据,只需与资源服务器共享

在本文中,我使用了中定义的角色。但是,我没有区分资源服务器和授权服务器。为了简单起见,我假设它们是相同的,并将它们称为“资源服务器”

我可以看到两个不同的事件链。假设这两种情况都从资源所有者开始,目的是让客户端访问受保护的资源

案例1,资源服务器提供的GUI
1.客户端将资源所有者转发到资源服务器的登录页。
2.资源所有者在资源服务器的GUI上提供其凭据。
3.成功后,资源服务器将资源所有者转发给客户端,并向用户客户端提供令牌

案例2,客户提供的GUI
1.客户端要求资源所有者向其自己的GUI提供其凭据。
2.客户端将提供的凭据发送到资源服务器。
3.成功后,客户端获得令牌并访问资源服务器

我关心的是案例2。如果客户端不是作为客户端进行身份验证,而是作为资源所有者进行身份验证,那么客户端在资源服务器上获得完全权限会有多困难?RFC声明使用OAuth2而不是让客户端处理资源所有者凭据的原因如下:

“第三方应用程序对资源的访问过于广泛 所有者的受保护资源,使资源所有者没有任何 能够将持续时间或访问权限限制在 资源。”

RFC进一步声明:

“需要第三方应用程序来存储资源 供将来使用的所有者凭据,通常是 明文。”

在案例2中,客户机可以很好地保存这一点

所以。。。您能假设实现Oauth2(在案例2中)的客户端比不实现Oauth2的客户端更安全吗?资源服务器是否有可能实现防止此类事件发生的机制?

考虑案例2:

假设资源所有者已向客户端提供了他/她的凭据,并且正如您所述,客户端必须以纯文本形式将密码存储在某个位置

1) 但是,我们能否相信客户在未经您允许的情况下不会访问任何信息??
2) 如果有人入侵客户端数据库并访问所有可能包含敏感信息(如网上银行密码等)的凭据,该怎么办

因此,为了防止这些安全问题,资源所有者直接与资源服务器打交道,并为客户端设置权限,使其只访问它想要的信息,而不访问更多的信息。然后,服务器向客户机发出一个令牌(如网关通行证),每当客户机需要一些信息时,它就必须发送令牌


因此,出于安全原因,最好不要向客户提供我们的凭据。

您可以假设,使用适当的OAuth2实现,您的系统比传统的基于用户/通行证的系统更安全

案例1显然更优越,因为没有用户凭据向客户端公开

案例2只是一种可能性,许多OAuth2提供商根本不支持它。即使是标准也不鼓励使用它,似乎只有在出于某种奇怪的原因仍然必须使用普通的基于用户/过程的逻辑时,它才是一种退路。这种情况还是稍微好一点,因为客户端应用程序可能根本不存储您的凭据。可以在创建OAuth请求之后立即删除指定的凭据,并且只应存储已授予的令牌。获得刷新令牌后,无需再次请求您的用户/通行证

请注意,从应用程序中窃取令牌仍然存在安全风险,但窃贼不会拥有您的凭据的完全权限,只拥有您授予应用程序的访问权限。此外,访问令牌过期,提供者应支持撤销刷新令牌