OAuth 2.0 - 服务器端登录

时间:2012-10-29 09:42:44

标签: authentication oauth oauth-2.0 facebook-oauth

我正在开发一项网络服务,我希望我的用户使用一些已知的身份验证提供程序(Facebook,Google等等)登录,而不是注册新用户。

我将把Stack溢出作为这种服务的一个例子。

根据我从阅读O-Auth教程中的理解,流程应该是这样的:

1. A user log in for the first time to Stack Overflow
2. User is asked to log in via Google or Facebook.
3. Stack overflow redirects the user to Google along with Stack Overflow app ID and a Redirect URL (Callback)
4. Google ask the user: "Stack overflow wants to access your account" - allow/deny. 
5. Assuming the user allowed, Google will redirect the user back to Stack Overflow, and will send a Token back to stack overflow servers (the Callback URL) as well as a client ID (unique google id)
6. If this client id does not exists, Stack overflow creates a new user in its database with this client id, if it does exists, it will just return the user's data (e.g. questions asked)
7. Using the saved TOKEN, stack overflow servers can grab information from Google (if needed) without the user interaction (since the user allowed access to Google)

此流程是否准确?如果是这样,这是主要问题。

客户端

客户现在想要向Stack Overflow发送/接收信息(例如发布问题)。

  • 客户端需要向Stack溢出服务器发送什么样的信息?为了让他们确认这确实是用户?

服务器端

  • Stack如何溢出,验证此用户? (即,什么样的信息,堆栈溢出保存在用户身上以识别他?Google / Facebook ID?)

  • 堆栈溢出服务器希望从用户的Google帐户中获取信息(用户允许此操作),堆栈流服务器需要向Google发送哪种信息才能检索此信息。

    < / LI>

1 个答案:

答案 0 :(得分:0)

我认为你的假设大多是准确的。但有一个例外:

  

5)假设用户允许,Google会将用户重定向回Stack Overflow,并将令牌发送回堆栈溢出服务器(回拨URL)以及客户端ID(唯一的Google ID)

通常,OAuth2服务器不返回clientId或任何用户详细信息,它只返回令牌。实际上,oauth客户端(即你的例子中的stackoverflow)根本不应该知道用户身份。 OAuth2旨在为客户端访问受限资源,而无需获得用户身份。

但是,如果客户端(stackoverflow)要求访问用户帐户(如您的示例中所示),则可以使用令牌查询某些用户详细信息。用户详细信息(例如标识符)完全取决于授权服务器(即Google)。即使服务器在查询结果中提供了这样的内部细节,您(stackoverflow)仍然​​应该仅基于通常可用的提供者不可知信息生成clientId,例如,使用电子邮件地址。

这也应该回答了你的两个服务器端问题。

  

客户端需要向Stack溢出服务器发送什么样的信息才能确认这确实是用户?

对于场景的其余部分,角色应该完全颠倒。 Google退出了范围,Stackoverflow将成为OAuth2服务器,您的应用程序将成为客户端。如果您的应用程序想要发布或读取问题,则应该要求stackoverflow用户授权这样做。如果授予了授权,则返回令牌,应用程序应使用令牌访问Stackoverflow上的问题。所以答案是:没有,只有令牌。

为了正确地完成答案,我必须承认我并不熟悉所提到网站的实施细节(google.facebook,stackoverflow等)。但如果他们遵守OAuth2标准,他们应该按照我的描述行事。熟悉的用户,如果任何网站的方案实施方式不同,请告诉我们!