如何在Play Framework 2.0中使用OAuth 2

时间:2012-04-04 20:15:50

标签: java scala playframework

所以我使用scribe连接到Facebook(OAuth 2)。但是我无法获取授权令牌。在Play's website,他们说

  

“版本2非常简单,无需库或助手即可轻松实现”。

但是,我不太清楚如何做到这一点!

我尝试更改将密钥发送到构建方法的路由文件。

GET    /slivr_auth/*name        controllers.Application.getKey(name)

但是,auth键包含'?'在网址中,所以我无法将其捕获为字符串。

任何帮助或建议都将不胜感激!

3 个答案:

答案 0 :(得分:4)

要回答您的具体问题,您可以通过调用以下方式获取请求(查询)参数:

Controller.request().queryString()

获取OAuth2很简单但不容易。有一个工作样本是有帮助的。我建议下载Play1,然后查找样本进行Facebook身份验证。然后将代码移植到Play2。我做了上述工作,发现这个过程非常有启发性。您将意识到每个站点和API都有怪癖/需求,因此几乎没有其他代码可以从一个站点到另一个站点使用。

更为循序渐进的答案是,有几个步骤。首先,您需要获得access_token,然后才能使用它。要获得access_token,您需要将用户发送到网站授权网址,到目前为止,facebook会是这样的:

https://graph.facebook.com/oauth/authorize/?client_id=idFromFacebook&redirect_uri=http://yourdomain.com/auth

用户接受授权后,网站会使用代码重定向用户,例如http://yourdomain.com/auth?code=XYZ_ABC。然后,您需要从站点请求访问令牌URL以获取访问令牌。对于Facebook来说,这将是:

https://graph.facebook.com/oauth/access_token?client_id=idFromFacebook&client_secret=secredFromFacebook&code=XYZ_ABC&redirect_uri=...

上述网址的响应中会包含access_token

现在,您可以开始使用访问令牌来请求信息。

答案 1 :(得分:1)

我不知道它是否有用,但我在Scala和Java中创建了一个支持OAuth / CAS / OpenID / HTTP身份验证和用户配置文件检索的Play 2.x客户端:https://github.com/leleuj/play-pac4j。< / p>

对于OAuth支持,它基于Scribe并支持Facebook,Twitter,Google,Yahoo,DropBox,Github,LinkedIn,Windows Live,WordPress ......

答案 2 :(得分:0)

我检查了多个示例,但this one开箱即用。

  1. 克隆回购
  2. 导航至$
  3. 创建Google credentials并将samples/java/play-authenticate-simple-oauthclientId添加到clientSecret
  4. 运行conf/play-authenticate/mine.conf
  5. 导航至localhost:9000
  6. 登录