0

我使用 gem 'rack-oauth2-server'。目前我需要通过移动应用程序的电子邮件/密码添加对 API 的访问。

关于问题:Gem 提供来自“oauth/access_token”端点的访问令牌。这需要下一个参数:'email'、'password'、'client_id'、'secret'。'client_id' 和 'secret' - 来自 mongodb 集合的 oauth 客户端字段。客户有设置范围访问。我的用户类型很少。对于每种用户类型,访问范围不同(不同的 oauth 客户端)。

所以,一个问题:我希望允许任何用户类型从移动应用程序访问 api,但是,在登录之前,我不知道哪种类型的用户。因此,移动应用程序无法知道应该将哪个 client_id 和 sercret 传递给“oauth/access_token”请求。

可能存在一些用于 Rails 请求的预钩子或另一种添加参数到动态请求的方法(服务器端)?注意:不能使用 before_filter,因为 'rack-oauth2-server' 在回调之前调用。

PS对不起我的英语不好。

4

1 回答 1

1

可能存在一些用于 Rails 请求的预钩子或另一种添加参数到动态请求的方法(服务器端)?注意:不能使用 before_filter,因为 'rack-oauth2-server' 在回调之前调用。

Rails 应用程序是一堆Rack 中间件。因此,您可以编写一个新的来识别和添加/设置/更新您需要的请求变量。上面的链接解释了这个概念以及如何添加/管理自定义中间件。

所以,一个问题:我希望允许任何用户类型从移动应用程序访问 api,但是,在登录之前,我不知道哪种类型的用户。因此,移动应用程序无法知道应该将哪个 client_id 和 sercret 传递给“oauth/access_token”请求。

话虽如此,您似乎在混淆client_idoAuth 上下文中的含义。客户端是应用程序,在您的情况下是移动应用程序,它已注册并连接到您的 oAuth 端点。因此,相同的移动应用程序(理想情况下)不应该使用不同client_id的 s 进行连接。只需使用不同的表单或下拉菜单,您的用户就可以选择他们想要登录的方式并设置适当的scope参数。

PS。由于您使用的是Client Credentials授权类型,请确保您使用的是安全连接。

于 2016-05-21T11:09:44.100 回答