我在使用 Okta token 身份验证时遇到问题,我知道如何使用 drf token 和 jwt token 身份验证进行身份验证。
在我的项目中,我也必须使用 okta token ,它也是一种 jwt,但是,此 token 由前端生成并在请求中发回给我
所以在这里您可以看到我如何使用 okta_jwt 包验证 okta token :
def post(self, request, *args, **kwargs):
access_token = request.META.get('HTTP_AUTHORIZATION')
try:
validate_token(access_token, config.issuer, config.aud, config.client_id)
except Exception as e:
return JsonResponse({"result": e.args[0]}, status=400)
..........
基本上我必须从 header 中取出 token 并使用 okta_jwt 检查它是否合法
显然,我认为这不是一个好的解决方案,而且很难进行单元测试
谁能为此提供更好的解决方案?
谢谢
最佳答案
我找到了解决方案:
我刚刚创建了继承自 BaseAuthentication 的自定义身份验证。在自定义身份验证中,您可以执行任何您想要的身份验证过程:
class OktaAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
access_token = request.META.get('HTTP_AUTHORIZATION')
if not access_token:
return None
payload = validate_token(access_token, config.issuer, config.aud, config.client_id)
try:
user = get_user_model().objects.get(email=payload['sub'])
except User.DoesNotExist:
raise exceptions.AuthenticationFailed('No such user')
return user, None
在 setting.py 中,确保将自定义身份验证添加为默认身份验证:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'core.authentication.OktaAuthentication',
)}
在 View 中:
authentication_classes = (OktaAuthentication,)
permission_classes = (IsAuthenticated,)
关于带有 okta OAUTH token 身份验证的 Django Rest API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61642674/