Play Framework 2.2.2 中的 OAuth
Posted
技术标签:
【中文标题】Play Framework 2.2.2 中的 OAuth【英文标题】:OAuth in Play Framework 2.2.2 【发布时间】:2014-04-03 12:29:51 【问题描述】:我一直在寻找有关如何在 Play 框架(版本 2.2.2)中执行 OAuth 的一些文档,但我真的找不到任何东西。我在一个地方读到它已被弃用,但我也找不到任何关于此的信息。有人知道吗?我想连接到 Twitter API 并在我的应用程序中发出一些数据请求。
【问题讨论】:
【参考方案1】:您可以在这些开源项目中找到带有 Play Framework 的 OAuth 示例:
securesocial play-silhouette play-authenticate【讨论】:
【参考方案2】:它受到支持,实际上非常简单。
这是直接来自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 人员忽略它的原因。
【讨论】:
作者征求意见 - 你告诉他“很容易实现”~ 这不是很有建设性。以上是关于Play Framework 2.2.2 中的 OAuth的主要内容,如果未能解决你的问题,请参考以下文章
Play Framework:如何不查看文件夹以了解 Play Framework 中的更改
Play Framework Routes 中的 Scala 反引号