【发布时间】:2021-05-04 15:41:09
【问题描述】:
我有一个使用 devise 4.7.1、doorkeeper 5.5.1 和 devise-doorkeeper 1.2.0 的 Rails 6.1 应用程序。
我正在尝试运行 (PKCE) OAuth 流程,但最后一步 - 对 /oauth/token 的 POST 请求 - 返回带有 JSON 内容 {"error": "You need to sign in or sign up before continuing."} 的 401 Unauthorized 错误。
我对此感到困惑,因为据我所知,未经身份验证的用户应该可以访问 /oauth/token 端点。也很奇怪(但可能是红鲱鱼)是,如果我尝试使用 curl 运行相同的 POST 请求,但删除 User-Agent 标头,它会成功。
我目前的嫌疑人是initializers/doorkeeper.rb中的这段代码:
resource_owner_authenticator do
current_user || warden.authenticate!(scope: :user)
end
这来自Doorkeeper docs。通过单步执行代码,我可以看到是对 warden.authenticate! 的调用返回了 401 错误。门卫的TokensController#create 永远不会被调用。
我是否遗漏了任何允许未经身份验证访问此TokensController#create 端点的重要步骤?
【问题讨论】:
-
它甚至不应该进入您的
resource_owner_authenticator块,因为每个人都可以使用POST /oauth/token。我认为由于某种原因:doorkeeper_authorize!before_action 被调用,也许您在 TokensController 或超类中错误地配置了它? -
感谢@AaronBrager,这很有帮助!通过知道
resource_owner_authenticator根本不应该被击中,我能够向后工作以确定问题。简而言之,它是由我们的 Ahoy 分析库引起的。很快就会写一个更完整的描述:)
标签: ruby-on-rails ruby devise doorkeeper