gpt4 book ai didi

ruby-on-rails - Oauth2 流程使用 Facebook uid 作为凭据请求 token

转载 作者:行者123 更新时间:2023-12-02 03:52:55 25 4
gpt4 key购买 nike

我正在构建一个带有 Rails 后端的 iPhone 客户端。客户端通过 Oauth2 API 与服务器通信。我已经使用 oauth2 和 doorkeeper gem 进行了设置。

每个 API 请求都必须使用 token 发送。我目前支持两种 token “类型”:

  • 客户端:使用客户端凭据授权类型。这适用于非特定于用户的请求,例如访问应用范围内的 Assets 、 key 等。
  • 用户:使用密码凭证授予类型。要获得此 token ,客户端必须通过传递有效的用户名/密码组合来请求它。所有用户请求都使用此 token 。

一切正常,但现在我遇到了一个问题,因为我允许用户也使用 Facebook 登录该应用。

在用户登录 FB 后,我的客户端通过将 Facebook UID 传递到我的服务器(使用客户端 token )进行响应。然后,我在我的服务器上进行一些检查,以将此 UID 与我数据库中的现有用户相匹配。

问题是:我想用用户 token 响应这个请求。需要此 token ,因为用户现在将登录到应用程序,并且任何后续请求都需要此 token 。然而,目前我觉得我唯一能做到这一点的方法是:

用用户名和密码响应。然后让客户端按照密码凭证流程请求用户 token 。我不喜欢这样,因为我要传递密码,而且它需要多次旅行。

我觉得我可能缺少一些基本的东西。我应该用另一种方式来处理这个流程吗?

最佳答案

我想我有一个解决方案,但这绝对是一个 hack。

基本上我是在劫持密码凭证流来处理这个 Facebook 场景。

客户端像这样调用(我在 ruby​​ 中测试时格式可能会关闭):

curl -i http://www.example.com/oauth/token   -F grant_type=password   -F client_id=(client id)-F client_secret=(client secret) -F username=(email address) -F password=(password) -F provider="facebook" -F uid=(fb uid) -F token=(fb token)

在我的服务器上,我检查“provider”参数。如果找到,它不会使用密码身份验证,而是使用 facebook uid 在用户表中查找匹配项。我还将 FB token 作为安全措施传递(我在查找匹配项之前验证此 token 是否属于 uid)。如果找到匹配项,用户将被设置为 token 的资源所有者,这意味着我最终得到一个用户 token 。

这是我的 doorkeeper.rb 的代码块:

resource_owner_from_credentials do |routes|
if params[:provider]
// FB uid authentication path code here
else
// password authentication
user = User.find_by_email(params[:username])
user if user && user.authenticate(params[:password])
end
end

关于ruby-on-rails - Oauth2 流程使用 Facebook uid 作为凭据请求 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13735227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com