【发布时间】:2015-07-03 20:08:25
【问题描述】:
我通过测试 API 关注了页面 https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Resource-Owner-Password-Credentials-flow
curl -F grant_type=password \
-F username=foo@bar.com \
-F password=mypass \
-X POST http://localhost:3000/oauth/token
我得到了回应:
{ “ACCESS_TOKEN”: “6d4398b75d94835631a453af770161a6f58618b101b58ccf62a5a8492bce3440”, “token_type”: “承载”, “expires_in”:600, “refresh_token”: “c1445d0a27a8278268c1187c2e3da7163525f1fac8093890430edd328f51c3de”, “created_at”:1429931390} P>
但是当我调用 /oauth/authorize 时:
curl -F response_type=6d4398b75d94835631a453af770161a6f58618b101b58ccf62a5a8492bce3440 \
-F client_id=9c291dc4aa87bfafd6c6a4cf6930d225c106f8fe88e1d0769832047f1ee011c4 \
-F client_secret=decba5aca425095978d33653ef03d654f0b74427bcec0596bdde518016708c35 \
-F redirect_uri=urn:ietf:wg:oauth:2.0:oob \
-F username=foo@bar.com \
-X POST http://localhost:3000/oauth/authorize
但我得到了:
在 2015 年 4 月 25 日 00:30:05 -0300 为 127.0.0.1 开始 POST "/oauth/authorize" Doorkeeper::AuthorizationsController#create as / 处理 参数:{ “RESPONSE_TYPE”=> “6d4398b75d94835631a453af770161a6f58618b101b58ccf62a5a8492bce3440”, “CLIENT_ID”=> “9c291dc4aa87bfafd6c6a4cf6930d225c106f8fe88e1d0769832047f1ee011c4”, “client_secret”=> “[FILTERED]”, “REDIRECT_URI”=> “瓮:IETF:WG:OAuth的:2.0:OOB” , "用户名"=>"foo@bar.com"} 无法验证 CSRF 令牌的真实性 在 1 毫秒内完成 422 个不可处理的实体 ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): ...
什么,我做错了吗?
【问题讨论】:
-
这是预期行为。授权表单在提供程序应用程序中呈现为 HTML,幸运的是,Rails 默认检查它在表单中呈现的 CSRF 令牌是否与表单提交匹配。因此,没有该令牌的
curl命令会引发“CSRF 验证失败”。 -
这个我知道,但是我正在尝试使用doorskeep oauth2 来写一个API,并且API 没有呈现HTML。
-
如果您了解风险,您可能希望为该控制器操作禁用 Rails 伪造保护。 Doorkeeper 没有为此提供选项,您需要重新打开该控制器。
-
最好配置门卫 gem 以支持资源所有者密码凭证流 (github.com/doorkeeper-gem/doorkeeper/wiki/…),以防您希望允许 API 客户端询问用户名和密码。您使用的流程旨在将用户重定向到您的 Web 服务以安全登录,并且绝不会将您的用户凭据暴露给 3rd 方应用程序。
-
@MarcosSousa 你解决了这个问题吗?
标签: ruby-on-rails-4 doorkeeper