Django - 如何在微服务架构中实现认证服务

时间:2017-07-25 10:19:57

标签: django jwt microservices

基本上,我有几个独立的服务。我想构建一个身份验证服务。客户端从身份验证服务获取令牌时。客户使用它来进一步请求其他服务。客户端需要在请求标头中附加该标记。接收令牌的服务需要通过将令牌发送到认证服务器来验证令牌。因此,客户端对受保护路由的所有请求都需要由身份验证服务进行验证。问题是我不知道将代码自动发送到身份验证服务并接收结果的代码的最佳位置。 这是我到目前为止所尝试的: 我实现了这样的中间件:

class VerifyTokenMiddleware(object):

def process_request(self, request):
    if not request.META.get('HTTP_AUTHORIZATION'):
        return HttpResponse(status=404)
    auth_header = request.META.get('HTTP_AUTHORIZATION')
    token = auth_header[4:]
    response = requests.post(AUTH_URL, {"token": token})
    if response.status_code == 400:
        return HttpResponse(status=403)
    return None

然而,我的解决方案的问题是每个服务请求(不是auth服务)都必须通过该中间件。因此,客户端无法像以前一样访问未受保护的路由。 非常感谢任何帮助。 :d

我使用了django restframework jwt https://github.com/GetBlimp/django-rest-framework-jwt

1 个答案:

答案 0 :(得分:-2)

有很多方法来设计微服务,你可以编写文件restfull方法,如

class RestFulClient:
   @classmethod
   def get(cls, url, loggers, headers):
       return is_success, status_code, data

   @classmethod
   def post(cls, url, headers, loggers, params={}):
       return is_success, status_code, status_message, data

   @classmethod
   def put(cls, url, headers, loggers, params={}):
       return is_success, status_code, status_message, data

   @classmethod
   def delete(cls, url, headers, loggers, params={}):
       return is_success, status_code, status_message

有问题吗?