0

我正在使用 Play 框架的 Scala 版本构建 API。一些端点将包含机密数据,但我不确定如何确保这一点。

安全社交 ( http://securesocial.ws/guide/configuration.html ) 是我一直在研究的一个库,但它似乎面向网站并使用 OAuth 提供程序登录。

在这种情况下,我似乎需要成为 OAuth 提供者。或者我是否可以允许用户使用提供商登录,比如 Twitter?但是那将如何工作呢?围绕 OAuth 的文档似乎非常糟糕。

4

1 回答 1

0

没有内置的方式来管理令牌。我建议构建一个令牌系统,用于分发和管理访问令牌的使用。您可以为每个用户拥有一个,或使用不同的系统。

然后对于每个端点,您将有一个包装的操作来保护 API。

case class SecuredAPIRequest(request:Request[AnyContent]) extends 

WrappedRequest(request)

trait SecuredController{
  import play.api.mvc.Results._

  //This takes an action for a request, and checks to see if the apiKey equals or API_KEY
  def SecuredAPIAction(f:SecuredAPIRequest => Result) = Action{
    request =>
      request.body.asJson.map{ jsValue =>
        (jsValue \ "apiKey").asOpt[String] match{
          case Some(key) if validKey(key) => f(SecuredAPIRequest(request)) //We are clear to go, execute our function. 
            // NOTE: validKey would be a function that checks the key against our DB ensuring that it is valid.
          case None => Forbidden

        }

      }.getOrElse(Forbidden)
  }
}

SecureSocial 所做的是将安全请求路由到身份验证服务(Twitter、Facebook 等),并使用它们的令牌作为安全性。这不能作为 API 工作,因为不可能重定向用户进行身份验证。

于 2013-11-05T19:45:59.703 回答