email/password 对 API 的 Oauth2 访问

Oauth2 access to API by email/password

我用gem'rack-oauth2-server'。目前我需要通过 email/password 从移动应用程序添加对 API 的访问权限。

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

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

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

P.S。请原谅我的英语不好。

Maybe exist some pre-hook for rails requests or another method for add params to request on fly(server side)? Note: before_filter not can be used, because 'rack-oauth2-server' called before callbacks.

Rails 应用程序是 Rack middleware 的堆栈。因此,您可以编写一个新的来识别和 adds/sets/updates 请求您需要的变量。上面的 link 解释了概念以及如何 add/manage 自定义中间件。

So, a problem: I want allow get access to api from mobile app for any user type, but, before login, i don't know which type have user. So, mobile app can't know which client_id and sercret should be passwed to 'oauth/access_token' request.

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

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