我正在开发一个REST API,它由角度js应用程序以及其他一些应用程序/客户端使用。我正在使用Django REST Framework,我想使用django-oauth-toolkit OAUTH2进行身份验证处理。
问题: 某些API调用只能由其他应用程序/客户端调用,而不能由用户自行调用(原因:允许外部应用程序为特定用户解锁成就但不允许用户执行此操作)。 我想过使用两个不同的范围:一个用于用户,另一个用于外部应用程序/客户端,并且只允许对这些范围中的任何一个进行特定的API调用。这是实现我意图的正确方法吗?如果是这样,我如何限制用户查询“外部应用程序”范围?
答案 0 :(得分:0)
我之前在DjangoRestFramework中使用自定义Authentication
class APIKeyAuthentication(BaseAuthentication):
def authenticate(self, request):
"""
Check if there is an api key in the request and match it
to the api keys we have. If it matches or is empty allow entrance.
"""
api_key = request.META.get('HTTP_X_APIKEY', None)
if not api_key:
# if api key not in headers try get params
api_key = request.GET.get("apikey", request.GET.get("api_key", None))
if not api_key:
# no api key in request
raise PermissionDenied(
detail="No API key send. Use the header \"X-APIKey\" "
"or the GET parameter \"apikey\""
)
auth_user = get_user_from_django_oauth_toolkit()
if api_key == settings.APIKEYS["internal"]:
request.is_internal = True
return auth_user, None
您需要更新settings.py
以告知DRF使用此身份验证
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'app.authentication.APIKeyAuthentication',
)
}