我觉得这可能会在这里的另一个 OAuth 问题中得到回答,但我找不到它......
我已经在我正在编写的 Web 服务上实现了 OAuth 提供程序。我的提供者(“应用程序”)的 OAuth 消费者拥有消费者密钥,并以典型的 OAuth 方式获取用户访问令牌(获取请求令牌、重定向到我的生产者以让用户授权、获取访问令牌、存储它等) . 这一切都很好。
我的问题是关于这些 OAuth 消费者如何在使用我的应用程序的登录凭据访问他们时对某人进行身份验证。基本上,当有人访问消费者应用程序时,我想:
- 用户在消费者网站上点击登录。
- 用户被重定向到我的应用程序并显示了一个登录表单。
- 登录后,我的应用程序(OAuth 提供者)意识到这个用户已经授权了这个消费者,并将他们重定向回消费者。
- 在此请求中,消费者以某种方式被告知该用户的用户名(或访问令牌)。
这类似于典型的 OAuth 流程,不同之处在于 OAuth 使用者不需要将授权的请求令牌交换为访问令牌。相反,一旦用户通过身份验证,消费者现在就知道哪个用户通过了身份验证,并且可以立即开始使用他们已经存储的存储令牌/秘密发出请求。
实施时我需要考虑哪些安全条件?这甚至可以安全地实施吗?天真地,这可以通过让生产者向消费者回调返回一些 GET 参数以及用户的用户名(或其他独特的东西)来实现。但是,攻击者可以通过使用他们想要攻击的用户的用户名向消费者的回调发出请求来利用这一点。
想法?这是我试图重新发明和重新实施的已解决问题吗?我的平台是 Java,如果有库已经完成了所有这些。谢谢!