Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OAuth2 client without access token

Tags:

php

oauth-2.0

So before I start, I'm a bit of an OAuth2 newbie, so still trying to really wrap my head around the various permission scopes and grants.

I've managed to successfully implement an OAuth2 server using the Laravel OAuth2 Server package.

The current site I'm working on will simply dogfood from the API, using the client_credentials grant type. I've managed to get this successfully working and can make API calls with the provided access token.

However, I'm wondering how I can implement an architecture similar to Instagram, Soundcloud, etc, who don't require an access_token for basic endpoints, just a client_id. How do they do this? Is this a custom grant type?

Preferably, I'd only like to start requiring an access token when accessing private resources, such as those for modifying user information, etc. As far as I'm aware, for these I'd need to use the password grant type, which isn't a problem.

like image 342
Matthew Ruddy Avatar asked Jun 11 '26 13:06

Matthew Ruddy


2 Answers

OAuth has a few flows such as 2-legged or 3-legged which basically tells the developer how many requests he needs to make to the server to get the resource he wants.

For example, in a 2-legged flow you send a request with your id and secret (first request), you get back an access_token and using that token you can make other request for the resource you want (second request).

Comming back to your Instagram example, you can think at using just client_id as a 1-legged OAuth flow, because you make only one request to server to get the resource you want.

You can use such a flow for less sensitive resources, like a profile photo or user's nickname for example.

The implementation of a 1-legged flow is simple: - If the user_id is valid and the application doesn't need user approval to access requested resource, go ahead and show the resource.

So implementing a 1-legged flow consists in checking if the client_id is valid and checking if the requested resource needs user permission. That being said, you can use 1-legged for requesting a user profile photo, but you can't use the same flow for requesting the user's private messages.

You can read more about each OAuth Flow in The OAuth Bible.

like image 194
Alexandru Guzinschi Avatar answered Jun 13 '26 03:06

Alexandru Guzinschi


You have two different resources on your server - a) Resources that need some access checks b) Resources that are publicly accessible.

Actions on resources that need access checks should require that a user has been identified via the OAuth header in the request. In the context of Laravel - this would be a route with the 'before' key specified as Oauth.

Actions that do not need access could glean context about what user is relevant by building your routes to accept an argument that gives you context about the user. Let's say that you have a profile that a user can see without any sort of access. Your API endpoint for a JSON representation of that could be /api/profile/[user_id], where [user_id] is the ID of the user profile you would like to see. For these routes where you do not care about access, you can leave off the oauth before filter in your route declaration.

like image 28
user2923779 Avatar answered Jun 13 '26 03:06

user2923779



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!