OAuth¶
Flask-REST-JSONAPI通过Flask-OAuthlib包,支持OAuth功能。
例:
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)
上述例子中,Flask-REST-JSONAPI的资源只要添加了装饰器,就会进行保护
oauth2.require_oauth(<scope>)
指定范围模式如下:
<action>_<resource_type>
动作包括:
- list:ResourceList的get方法
- create:ResourceList的post方法
- get:ResourceDetail的get方法
- update:ResourceDetail的get方法
- delete:ResrouceDetail的delete方法
例:
list_person
如果我们想定制权限范围,我们可以提供一个计算定制范围的函数。函数格式如下:
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'
用例:
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)
注:
我们能给定制的范围方法,起任意的名字。但是,我们必须设定两个必须参数:resource和method。就像上述例子一样。
如果我们需要禁用OAuth,或者为某个资源定制保护方法,我们可以给资源管理器添加如下选项:
例:
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 !'