OAuth 2.0 规范定义了Resource Owner Password Credentials Grant Type,它允许将资源所有者密码凭据(即用户名和密码)直接用作授权授予来获取访问令牌。
我想允许用户在客户端上“通过 Facebook 登录”,而不是直接提供凭据。然后,客户端可以将用户的 Facebook 访问令牌交换为授权服务器的访问令牌。这个方案是否适合 OAuth2 的框架?
OAuth 2.0 规范定义了Resource Owner Password Credentials Grant Type,它允许将资源所有者密码凭据(即用户名和密码)直接用作授权授予来获取访问令牌。
我想允许用户在客户端上“通过 Facebook 登录”,而不是直接提供凭据。然后,客户端可以将用户的 Facebook 访问令牌交换为授权服务器的访问令牌。这个方案是否适合 OAuth2 的框架?
然后,客户端可以将用户的 Facebook 访问令牌交换为授权服务器的访问令牌。
这是否意味着您有 2 个授权服务器(一个是 Facebook,另一个是您的私人服务器)?如果是 - 您正在滥用 OAuth,应该改用授权代码授予方案。
在 OAuth 2.0 规范 (v25) 的图 5 中,您可以找到工作流定义:
资源所有者向客户端提供其用户名和密码。
客户端通过包含从资源所有者收到的凭据,从授权服务器的令牌端点请求访问令牌。发出请求时,客户端向授权服务器进行身份验证。
授权服务器对客户端进行身份验证并验证资源所有者凭据,如果有效则颁发访问令牌。
这是来自 Facebook http://developers.facebook.com/docs/guides/web/的引用:
为了让用户登录到您的站点,需要做三件事。首先,Facebook 需要对用户进行身份验证。这确保了用户是他们所说的那个人。其次,Facebook 需要对您的网站进行身份验证。这可以确保用户将他们的信息提供给您的网站,而不是其他人。最后,用户必须明确授权您的网站访问他们的信息。这可确保用户确切地知道他们向您的网站披露了哪些数据。
在这两个地方,您都有一个且只有一个授权服务器 - 在您的情况下 - Facebook。