Oauth Play框架下HTTP API的认证与授权

Oauth Play框架下HTTP API的认证与授权,oauth,playframework,Oauth,Playframework,我正在使用play框架的Scala版本构建一个API。一些端点将包含机密数据,但我不确定如何确保这一点 securesocial()是我一直在研究的一个库,但它似乎面向网站和OAuth提供商登录 在这种情况下,我似乎需要成为OAuth提供者。或者,我是否可以允许用户通过提供商(比如Twitter)登录?但那怎么办呢?OAuth的文档似乎非常糟糕。没有内置的方法来管理令牌。我建议构建一个令牌系统,它将分发和管理访问令牌的使用。每个用户可以有一个,也可以使用不同的系统 然后,对于每个端点,您将有一个

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

securesocial()是我一直在研究的一个库,但它似乎面向网站和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使用,因为无法重定向用户进行身份验证

谢谢你。从概念上讲,您并没有对令牌进行太多的解释,所以我无法根据该建议构建一些东西。即使只是一个与他人的链接也足够了。