Play Framework 2.2.2中的OAuth

时间:2014-04-03 12:29:51

标签: oauth playframework

我一直在寻找一些关于如何在Play框架(版本2.2.2)中执行OAuth的文档,但我找不到任何东西。我在一个地方读到它已被弃用但我也无法找到任何相关信息。有人知道吗?我想连接到Twitter API并在我的应用程序中提出一些数据请求。

2 个答案:

答案 0 :(得分:1)

您可以在这些开源项目中找到使用Play Framework的OAuth示例:

答案 1 :(得分:-1)

它得到了支持,而且非常直接。

这是直接来自Play Docs的OAuth授权示例:

  object Twitter extends Controller {

  val KEY = ConsumerKey("xxxxx", "xxxxx")

  val TWITTER = OAuth(ServiceInfo(
    "https://api.twitter.com/oauth/request_token",
    "https://api.twitter.com/oauth/access_token",
    "https://api.twitter.com/oauth/authorize", KEY),
    false)

  def authenticate = Action { request =>
    request.queryString.get("oauth_verifier").flatMap(_.headOption).map { verifier =>
      val tokenPair = sessionTokenPair(request).get
      // We got the verifier; now get the access token, store it and back to index
      TWITTER.retrieveAccessToken(tokenPair, verifier) match {
        case Right(t) => {
          // We received the authorized tokens in the OAuth object - store it before we proceed
          Redirect(routes.Application.index).withSession("token" -> t.token, "secret" -> t.secret)
        }
        case Left(e) => throw e
      }
    }.getOrElse(
      TWITTER.retrieveRequestToken("http://localhost:9000/auth") match {
        case Right(t) => {
          // We received the unauthorized tokens in the OAuth object - store it before we proceed
          Redirect(TWITTER.redirectUrl(t.token)).withSession("token" -> t.token, "secret" -> t.secret)
        }
        case Left(e) => throw e
      })
  }

  def sessionTokenPair(implicit request: RequestHeader): Option[RequestToken] = {
    for {
      token <- request.session.get("token")
      secret <- request.session.get("secret")
    } yield {
      RequestToken(token, secret)
    }
  }
}

如果您想签署请求,可以这样做:

WS.url(s"https://api.twitter.com/1.1/account/verify_credentials.json")
   .sign(OAuthCalculator(Key, RequestToken(token, tokenSecret)))
   .get

请注意,以上内容适用于OAuth 1.0。 OAuth2很容易实现,没有专门的库,为什么Play人员将其遗漏了。