如何在Play Framework 2.0中使用OAuth 2

Wil*_*iam 8 java scala playframework

所以我使用scribe连接到Facebook(OAuth 2).但是我无法获取授权令牌.在Play的网站上,他们说

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

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

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

GET    /slivr_auth/*name        controllers.Application.getKey(name)
Run Code Online (Sandbox Code Playgroud)

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

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

Vin*_*eet 4

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

Controller.request().queryString()
Run Code Online (Sandbox Code Playgroud)

获取 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
Run Code Online (Sandbox Code Playgroud)

一旦您的用户接受授权,该网站将使用代码重定向用户,例如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=...
Run Code Online (Sandbox Code Playgroud)

上述 url 的响应中将包含access_token

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