我一直想知道处理面向服务架构中使用Django的最佳方法,因此各个Django应用程序不会维护自己的用户存储。一个服务维护用户存储,而其他服务必须调用它以检索用户信息。
到目前为止的例子,我在考虑如何在Django REST中构建自定义身份验证类来处理这个问题:
class SOAAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
token = request.get_token_from_auth_header()
if not remote_auth_service.is_token_valid(token):
raise AuthFailed('Token is invalid')
user_properties = remote_users_service.get_user(token):
# user_properties is a dict of properties
if not user_properties:
raise AuthFailed('User does not exist.')
user = MyCustomUserClass(**user_properties)
return (user, 'soa')
因此,Django应用程序的数据库中不会保留用户信息,并且权限类可以查询MyCustomUserClass的实例以确定用户所属的组。
这种方法是否适用于简单的基于组的授权?我认为我不需要对象级权限,因此不需要在Django数据库中为我的用户创建行。