用户身份验证/使用OAuth登录

时间:2013-01-23 03:33:29

标签: security authentication web-applications login oauth

我觉得这可能会在另一个OAuth问题中得到解答,但我找不到它......

我已经在我正在编写的Web服务上实现了OAuth提供程序。我的提供商(“应用程序”)的OAuth使用者拥有使用者密钥,并以典型的OAuth方式获取用户访问权限(获取请求令牌,重定向到我的生产者以让用户授权,获取访问令牌,存储该等等) 。一切正常。

我的问题是这些OAuth使用者如何使用我的应用程序的登录凭据来验证访问他们的人。基本上,当有人访问消费者应用程序时,我想:

  1. 用户点击在消费者网站上登录。
  2. 将用户重定向到我的应用程序并提供登录表单。
  3. 登录后,我的应用程序(OAuth提供商)意识到此用户已经授权此消费者,并将其重定向回消费者。
  4. 消费者以某种方式在此请求中告知此用户的用户名(或访问令牌)。
  5. 这类似于典型的OAuth流,但OAuth使用者不需要为访问令牌交换授权请求令牌。相反,一旦用户进行了身份验证,消费者现在就知道哪个用户已经过身份验证,并且可以立即开始使用他们已经存储的存储令牌/密钥发出请求。

    实施此功能时需要考虑哪些安全条件?这甚至可以安全地实施吗?天真地,这可以通过让生产者使用用户的用户名(或其他独特的东西)将一些GET参数返回给消费者回调来实现。但是,攻击者可以通过使用他们想要攻击的用户的用户名向消费者的回调请求来利用此功能。

    思考?这是一个解决的问题,我正在尝试重新发明并重新实施?我的平台是Java,如果有库已经完成了所有这些。 谢谢!

1 个答案:

答案 0 :(得分:0)

你的问题是(3):

  

“登录后,我的应用程序(OAuth提供程序),意识到这个用户   已经授权此消费者,并将其重定向回   消费者“。

您的OAuth提供商无法意识到此用户已经过身份验证/授权,因为您的应用未授权。 您的应用应该决定谁是经过身份验证的,谁不是,以及他的授权。这是OAuth的全部想法。

如果您要实施OAuth提供商,“知道”由消费者进行身份验证的用户,那么消费者必须向您的提供商发送内容,并在消费者(OAuth客户端)和您的应用之间创建耦合(OAuth)提供商)。

OAuth SPEC完全定义了OAuth的通用接口,因此如果您想坚持使用它,则应避免向提供程序发送额外数据,因此不会将其耦合到特定客户端。