Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Security with Play! from Outside Application

I am working on writing a private REST API with Play! that I will make calls to from a mobile application and I am confused about how to keep it secure.

When working through the Yet Another Blog Engine example in Play!'s documentation, I worked through their authentication example, and it deals with logging in through a browser. From what I understand about Play!'s Secure module, it helps with browser sessions. Additionally, every StackOverflow question I have seen has been involved with an administration module on the web and the questions have been pertaining to sessions as well.

Does the Play! framework have any built in mechanism to prevent session hijacking?

Enforce Https routing for login with play framework

My current understanding of how the security should work:

  • The mobile app "logs in" to the web app and obtains some kind of token
  • With each subsequent call the token is appended to the end of the API call
  • If the mobile user "logs out" or the token expires, the web app removes the token
  • Every API call uses HTTPS in order to maintain security

Is it possible for me to make an HTTP request from the mobile application to the web application I create using Play! Framework while keeping it secure?

Am I approaching the whole situation incorrectly?

This is the first Play! app I have created and this is the first time I have used Heroku. I am not too far in that I would be opposed to switching to something else if it were significantly easier/more efficient/better suited to solve this problem.

EDIT: Also, in Play!'s YABE tutorial, it seems like they check the password in plain text. Just from a general standpoint, how is that not a security issue?

EDIT 2: I have looked over OAuth provider information and it seems to solve the problem. My only apprehension with it is that v2.0 has known security flaws and v1.0 seems complicated to implement for a situation where all I need is a secure connection between a mobile app and a web app. If I were to make every call require SSL, could I make each Play method just take username and password as parameters and disregard OAuth completely?

like image 467
eliot Avatar asked Mar 09 '13 19:03

eliot


People also ask

Is it safe to download apps outside Play Store?

In closing, the potential risks of installing third-party applications are why Android does not allow you to download files from unknown sources by default. Google Play Store is still the most reliable way to get your apps, but it is not bulletproof when it comes to security.

Why are apps blocked by Play protect?

This message appears if the application has not been verified by Google Play Protect. In most cases, this issue occurs because the applications under development have yet to be scanned by Play Protect.


1 Answers

Your example of having a mobile application authorize itself with a web application is achieved with an authorization framework like OAuth. This allows the web app to let the user login then issue an access token to the mobile app for making requests as that user, without the mobile app having to deal with the user's password.

Have a look at an OAuth provider module for Play. If you Google, you might find an OAuth client module for Play, but that's for the other side of OAuth, allowing your web app to authorize against a 3rd party provider. You'd then use an OAuth client library in your mobile app to deal with acquiring an access token.

It could even be a generic Java libary for OAuth - the Play 2.0 documentation for OAuth states that it hasn't provided an OAuth 2.0 module because it's simple enough not to even need a library. However there are a few Java libraries available.

Here's a project where somebody's put together some OAuth provider stuff with Play (referenced from this forum post):

https://github.com/mashup-fm/playframework-oauthprovider

like image 174
Nick Avatar answered Oct 07 '22 03:10

Nick