覆盖授权控制器门卫



我正在覆盖守门人AuthorizationsController.正如文档建议的那样,我从AuthorizationsController继承了.现在下面的代码显示了我最新的覆盖尝试。

我目前拥有什么

基本上,在新的授权门卫流程周围添加一个额外的 if 语句。我添加了第 3-7 行,目前工作正常。如果第 6 行等于 true,它会:error返回我。

我的问题

我仍然可以通过浏览器 URL 和服务器日志看到访问令牌。因此,作为用户,我仍然可以使用此AccessToken来检索Postman的一些数据。即使它在登录时给了我一个错误。这是为什么呢?我怎样才能防止这种情况发生?

class AuthorizationsController < Doorkeeper::AuthorizationsController
def new
application = Application.find(authorization.authorize.pre_auth.client.id)
resource_owner = User.find(current_resource_owner)
if application.users.exclude?(resource_owner) && application.owner != resource_owner
render :error
elsif pre_auth.authorizable?
if skip_authorization? || matching_token?
auth = authorization.authorize
redirect_to auth.redirect_uri
else
render :new
end
else
render :error
end
end
end

如果您查看 DigitalOcean 编写的 OAuth2 简介,我的 if 语句在步骤 3"用户代理接收具有重定向 URI 的访问令牌"中仍然成功,因为我可以在浏览器 URL 中看到带有重定向 URI 的访问令牌。在第 3 步之后,它给了我:error.

更新

在我对AuthorizationsController的覆盖开始之前,生成访问令牌的整个过程已经完成。我添加了一个简单的before_action打印到服务器日志中,但在此之前Doorkeeper::AccessToken Load (0.9ms) SELECT 'oauth_access_tokens'.* FROM 'oauth_access_tokens' WHERE 'oauth_access_tokens'.'token' = 'x' LIMIT 1发生。

您假设您在浏览器 url 中看到的令牌是 OAuthaccess_token。它实际上只是一个JWT(JSON Web Token)。我假设此令牌是某种会话令牌,因为用户尚未获得门卫的授权来使用该应用程序。您错误地假设您的 OAuth 流到达"用户代理使用重定向 URI 接收访问令牌"步骤。

URL 中的令牌完全无害,因此您没有理由阻止应用程序颁发令牌。如果用户停止其会话,令牌将变得无用。

希望这对:)有所帮助

在第 3 行和第 4 行,您正在调用authorization.authorize,它可能实际上是在执行授权,然后将访问令牌添加到响应中。

最新更新