Django - 如何在微服务架构中实现身份验证服务

ach*_*les 5 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
Run Code Online (Sandbox Code Playgroud)

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

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

小智 -4

它有很多方法来设计微服务,你可以编写文件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
Run Code Online (Sandbox Code Playgroud)

任何问题?