Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use OAuth 2 in Play Framework 2.0

So I am using scribe to connect to Facebook (OAuth 2). However I am having trouble getting the authorization token. On Play's website they say that

"Version 2 is simple enough to be implemented easily without library or helpers,".

However, I'm not quite sure how to do this!

I tried changing my routes file that would send the key to a built method.

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

However, the auth key contains a '?' in the url, so I can't capture it as a string.

Any help or advice would be appreciated!

like image 234
William Avatar asked Apr 04 '12 20:04

William


People also ask

Is OAuth2 compatible with oauth1?

OAuth 2.0 is not backwards compatible with OAuth 1.0 or 1.1, and should be thought of as a completely new protocol. OAuth 1.0 was largely based on two existing proprietary protocols: Flickr's authorization API and Google's AuthSub.

What is OAuth2 playground?

The OAuth 2.0 Playground is a tool for developers that simplifies experimentation with the OAuth 2.0 protocol and APIs. Trying out some requests in the OAuth 2.0 playground can help you understand how the protocol functions and make life easier when the time comes to use OAuth in your own code.


2 Answers

To answer your specific question, you can get request (query) parameters by calling:

Controller.request().queryString()

Getting OAuth2 is easy but not trivial. It helps to have a working sample. I would recommend downloading Play1, and looking up the sample for Facebook Authentication. And then porting the code over to Play2. I did the above and found the process very instructive. You will realize that each site and API has quirks/needs, so there is very little additional code that seems usable form one site to another.

A more step-by-step answer is that there are several steps. First, you need to get an access_token and then you can use it. To get an access_token you need to send the user to the sites authorization url, so far facebook this would be something like:

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

Once your user has accepted the authorization, the site will redirect the user with a code, something like http://yourdomain.com/auth?code=XYZ_ABC. You would then need to request from the sites access token url to get the access token. For Facebook this would be something like:

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

The response from the above url would have the access_token in it.

Now, you can start using the access token to request information.

like image 109
Vineet Avatar answered Sep 22 '22 21:09

Vineet


I don't know if it might help, but I've created a Play 2.x client in Scala and Java which supports OAuth/CAS/OpenID/HTTP authentication and user profile retrieval : https://github.com/leleuj/play-pac4j.

For OAuth support, it's based on Scribe and supports Facebook, Twitter, Google, Yahoo, DropBox, Github, LinkedIn, Windows live, WordPress...

like image 22
jleleu Avatar answered Sep 19 '22 21:09

jleleu