Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to authenticate user on REST using Shiro and OATH 2

I am about to start developing a REST service and security is an important aspect of this project but I can't find some definitive information on how to implement it. My service will be consumed by an Android App at first, but could be used by other platforms later. Controlling user access is critical, so Authorization and Authentication control of the REST services is very important.

Although I can find topics on how to make a secure REST API, like here, here and this big one here, to my surprise, all of them fail to point to a famous standard or framework or time tested solution, which usually is the "way to go" in securing software applications, where we avoid as much as we can to "roll your own security solution".

So far on my research I think OAUTH 2.0 (or even OAUTH 1.0) is the best way to go, it's a public widely used protocol and supports Authorization and Authentication and we can control the lifetime of keys and even have a special refresh key allowing the client to not store password information for acquiring a new key if needed.

I also think Apache Shiro is the best framework for Security, Authorization and Authentication in java, so it comes to a surprize for me when I can't find any integrations between Shiro and OAUTH 2.0...ok there is one that's 5 years old, and doesn't inspire much trust to me.

Even more curious is the fact that Les Hazlewood, the Apache Shiro PMC Chair, owns (ok, owned, he just sold it to Okta) Stormpath, a company made for Identity and User Management, so I would expect him to have provided some easy integrations between OAUTH 2.0 and Shiro, unless this would disrupt Stormpath business plan too much I guess (which I don't believe, since the Apache Foundation won't allow this kind of behavior).

So the final questions are:

1 - Are there any easy integrations between Shiro and OAUTH 2.0 or will I have to code my own?

2 - Does everyone implement their own OAUTH 2.0 solution for dealing with REST APIs access control or am I missing something?

like image 816
Michel Feinstein Avatar asked Mar 10 '17 02:03

Michel Feinstein


People also ask

What is OAuth 2.0 authentication in REST API?

OAuth2 is the preferred method of authenticating access to the API. OAuth2 allows authorization without the external application getting the user's email address or password. Instead, the external application gets a token that authorizes access to the user's account.

What is Shiro authentication?

Apache Shiro is a Java security framework that can perform authentication, authorization, session management, along with a host of other features for building secure applications.


2 Answers

I know the Buji project uses Shiro and supports Oauth2. I haven't used it, but you can check it out.

like image 163
Brian Demers Avatar answered Sep 29 '22 01:09

Brian Demers


You definately don't need to code your own. There's some great java libraries and apps that you can use for oauth2 and you can choose from a low level library that you use to build your own oauth2 server up to a full featured standalone openid connect server.

Spring security provides oauth2 that you can use to embed an oauth2 server in your application. A tutorial is available at http://www.baeldung.com/rest-api-spring-oauth2-angularjs.

There's mitreid openid connect https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server, which has a war overlay that you can use to add a user and client admin app into your webapp.

Keycloak (https://www.keycloak.org/) provides a full featured standalone openid connect server.

like image 36
httPants Avatar answered Sep 29 '22 01:09

httPants