我正在使用 Play 框架的 Scala 版本构建 API。一些端点将包含机密数据,但我不确定如何确保这一点。
安全社交 ( http://securesocial.ws/guide/configuration.html ) 是我一直在研究的一个库,但它似乎面向网站并使用 OAuth 提供程序登录。
在这种情况下,我似乎需要成为 OAuth 提供者。或者我是否可以允许用户使用提供商登录,比如 Twitter?但是那将如何工作呢?围绕 OAuth 的文档似乎非常糟糕。
我正在使用 Play 框架的 Scala 版本构建 API。一些端点将包含机密数据,但我不确定如何确保这一点。
安全社交 ( http://securesocial.ws/guide/configuration.html ) 是我一直在研究的一个库,但它似乎面向网站并使用 OAuth 提供程序登录。
在这种情况下,我似乎需要成为 OAuth 提供者。或者我是否可以允许用户使用提供商登录,比如 Twitter?但是那将如何工作呢?围绕 OAuth 的文档似乎非常糟糕。
没有内置的方式来管理令牌。我建议构建一个令牌系统,用于分发和管理访问令牌的使用。您可以为每个用户拥有一个,或使用不同的系统。
然后对于每个端点,您将有一个包装的操作来保护 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 工作,因为不可能重定向用户进行身份验证。