使用请求数据的剪影授权

Posted

技术标签:

【中文标题】使用请求数据的剪影授权【英文标题】:Silhouette authorization using request data 【发布时间】:2016-08-11 04:31:41 【问题描述】:

我使用 SilhouettePlay 2.4,如果 SecuredRequest 正文包含错误,我想限制操作。

我知道,我应该使用 Authorization 所描述的特征 official docs。

我正在尝试执行以下操作:

case class WithCheck(checkCriteria: String) extends Authorization[User, CookieAuthenticator] 
  def isAuthorized[B](user: User, authenticator: CookieAuthenticator)(implicit request: Request[B], messages: Messages) = 

    Future.successful(user.criteria == checkCriteria)
  

def myAction = SecuredAction(WithCheck("bar"))  implicit request =>
  val foo = ...// deserialize object from request.body
  val checkCriteria = foo.criteria 
  // do something else here

如何在WithCheck 类中使用checkCriteria 值?

【问题讨论】:

【参考方案1】:

我找到了解决办法。

不知何故,我看到isAuthorized 具有相同的request 作为隐式参数。因此,检查可以完全在isAuthorized 中完成。例如,

case class WithCheck() extends Authorization[User, CookieAuthenticator] 
  def isAuthorized[B](user: User, authenticator: CookieAuthenticator)(implicit request: Request[B], messages: Messages) = 
    val foo = upickle.read[Foo](request.body.toString())
    Future.successful(user.criteria == foo.criteria)
  

【讨论】:

这样的问题是我们必须解析请求两次。 Authorization trait 似乎有点设计缺陷,因为类型参数 B 没用。

以上是关于使用请求数据的剪影授权的主要内容,如果未能解决你的问题,请参考以下文章

Istio数据面配置解析18:使用RBAC对Http请求进行授权

CORS 使用“授权”标头和数据阻止 axios 请求

如何使用 GraphQL POST 请求进行授权获取?

Python请求库如何使用单个令牌传递授权标头

使用现有凭据向 youtube 数据 api 发出请求

使用请求头认证来测试需要授权的 API 接口