我使用gem' rack-oauth2-server'。目前,我需要通过移动应用的电子邮件/密码添加对API的访问权限。
关于问题: Gem提供来自' oauth / access_token'的访问令牌。端点。这需要下一个参数:'电子邮件','密码',' client_id',' secret'。 ' CLIENT_ID'并且'秘密' - 来自mongodb集合的oauth客户端字段。客户端已设置范围访问权限。我的用户类型很少。对于每个用户类型,可以使用不同的访问范围(不同的oauth客户端)。
所以,一个问题:我希望允许从任何用户类型的移动应用程序访问api,但是,在登录之前,我不知道哪个类型有用户。因此,移动应用程序无法知道哪个client_id和sercret应该被传递给“oauth / access_token”'请求。
也许存在一些预先挂钩的rails请求或另一种方法来添加params来请求(服务器端)?注意:不能使用before_filter,因为' rack-oauth2-server'在回调之前调用。
P.S。对不起我的英语不好。
答案 0 :(得分:1)
也许存在一些预先挂钩的rails请求或另一种方法来添加params来请求(服务器端)?注意:before_filter不能使用,因为'rack-oauth2-server'在回调之前调用。
Rails应用程序是Rack middleware的堆栈。因此,您可以编写一个新的,用于标识和添加/设置/更新所需的请求变量。上面的链接解释了概念以及如何添加/管理自定义中间件。
所以,一个问题:我希望允许从移动应用程序访问任何用户类型的api,但是,在登录之前,我不知道哪个类型有用户。因此,移动应用无法知道哪个client_id和sercret应该被传递到'oauth / access_token'请求。
话虽如此,似乎你在oAuth语境中混淆了client_id
的含义。客户端是应用程序,在您的情况下是移动应用程序,已注册并连接到您的oAuth端点。因此,相同的移动应用程序(理想情况下)不应使用不同的client_id
进行连接。只需使用不同的表单或下拉列表,即可让用户选择登录方式并设置相应的scope
参数。
PS。由于您使用的是Client Credentials
授权类型,因此请确保使用安全连接。