覆盖 AuthorizationsController 门卫
Override AuthorizationsController Doorkeeper
我正在凌驾于门卫 AuthorizationsController
之上。正如 docs 建议我继承自 AuthorizationsController
。现在下面的代码显示了我最近的覆盖尝试。
我目前拥有的
基本上,在 new Authorization Doorkeeper process 周围添加一个额外的 if 语句。我添加了第 3-7 行,目前效果很好。 returns 我 :error
如果第 6 行等于 true.
我的问题
我仍然可以通过浏览器 URL 和服务器日志看到 AccessToken。因此,作为用户,我仍然可以使用此 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
如果你检查 introduction 到 DigitalOcean 编写的 OAuth2,我的 if 语句在第 3 步仍然成功 'User-agent Receives Access Token with Redirect URI',因为我可以在我的浏览器中看到带有重定向 URI 的 AccessToken URL.在第 3 步之后,它给了我 :error
.
更新
在我对 AuthorizationsController
的覆盖开始之前,生成 AccessToken 的整个过程已经完成。我添加了一个简单的 before_action
来打印到服务器日志,但在此之前 Doorkeeper::AccessToken Load (0.9ms) SELECT 'oauth_access_tokens'.* FROM 'oauth_access_tokens' WHERE 'oauth_access_tokens'.'token' = 'x' LIMIT 1
发生了。
在第 3 行和第 4 行,您正在调用 authorization.authorize
,这可能实际上是在进行授权,然后将访问令牌添加到响应中。
您假设您在浏览器中看到的令牌 url 是一个 OAuth access_token
。它实际上只是一个 JWT
(JSON Web Token)。我假设此令牌是某种会话令牌,因为 Doorkeeper 未授权用户使用该应用程序。您错误地假设您的 OAuth 流程到达 'User-agent Receives Access Token with Redirect URI' 步骤。
您 url 中的令牌完全没有害处,因此您没有理由阻止您的应用程序颁发令牌。如果用户中断他们的会话,令牌将变得无用。
希望这对您有所帮助:)
我正在凌驾于门卫 AuthorizationsController
之上。正如 docs 建议我继承自 AuthorizationsController
。现在下面的代码显示了我最近的覆盖尝试。
我目前拥有的
基本上,在 new Authorization Doorkeeper process 周围添加一个额外的 if 语句。我添加了第 3-7 行,目前效果很好。 returns 我 :error
如果第 6 行等于 true.
我的问题
我仍然可以通过浏览器 URL 和服务器日志看到 AccessToken。因此,作为用户,我仍然可以使用此 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
如果你检查 introduction 到 DigitalOcean 编写的 OAuth2,我的 if 语句在第 3 步仍然成功 'User-agent Receives Access Token with Redirect URI',因为我可以在我的浏览器中看到带有重定向 URI 的 AccessToken URL.在第 3 步之后,它给了我 :error
.
更新
在我对 AuthorizationsController
的覆盖开始之前,生成 AccessToken 的整个过程已经完成。我添加了一个简单的 before_action
来打印到服务器日志,但在此之前 Doorkeeper::AccessToken Load (0.9ms) SELECT 'oauth_access_tokens'.* FROM 'oauth_access_tokens' WHERE 'oauth_access_tokens'.'token' = 'x' LIMIT 1
发生了。
在第 3 行和第 4 行,您正在调用 authorization.authorize
,这可能实际上是在进行授权,然后将访问令牌添加到响应中。
您假设您在浏览器中看到的令牌 url 是一个 OAuth access_token
。它实际上只是一个 JWT
(JSON Web Token)。我假设此令牌是某种会话令牌,因为 Doorkeeper 未授权用户使用该应用程序。您错误地假设您的 OAuth 流程到达 'User-agent Receives Access Token with Redirect URI' 步骤。
您 url 中的令牌完全没有害处,因此您没有理由阻止您的应用程序颁发令牌。如果用户中断他们的会话,令牌将变得无用。
希望这对您有所帮助:)