OAuthΒΆ

Flask-REST-JSONAPI support OAuth via Flask-OAuthlib

Example:

from flask import Flask
from flask_rest_jsonapi import Api
from flask_oauthlib.provider import OAuth2Provider

app = Flask(__name__)
oauth2 = OAuth2Provider()

api = Api()
api.init_app(app)
api.oauth_manager(oauth2)

In this example Flask-REST-JSONAPI will protect all your resource methods with this decorator

oauth2.require_oauth(<scope>)

The pattern of the scope is like that

<action>_<resource_type>

Where action is:

  • list: for the get method of a ResourceList
  • create: for the post method of a ResourceList
  • get: for the get method of a ResourceDetail
  • update: for the patch method of a ResourceDetail
  • delete: for the delete method of a ResourceDetail

Example

list_person

If you want to customize the scope you can provide a function that computes your custom scope. The function have to looks like that:

def get_scope(resource, method):
        """Compute the name of the scope for oauth

        :param Resource resource: the resource manager
        :param str method: an http method
        :return str: the name of the scope
        """
        return 'custom_scope'

Usage example:

from flask import Flask
from flask_rest_jsonapi import Api
from flask_oauthlib.provider import OAuth2Provider

app = Flask(__name__)
oauth2 = OAuth2Provider()

api = Api()
api.init_app(app)
api.oauth_manager(oauth2)
api.scope_setter(get_scope)

Note

You can name the custom scope computation method as you want but you have to set the 2 required parameters: resource and method like in this previous example.

If you want to disable OAuth or make custom methods protection for a resource you can add this option to the resource manager.

Example:

from flask_rest_jsonapi import ResourceList
from your_project.extensions import oauth2

class PersonList(ResourceList):
    disable_oauth = True

    @oauth2.require_oauth('custom_scope')
    def get(*args, **kwargs):
        return 'Hello world !'