使用JWT Auth对LDAP服务进行身份验证

时间:2014-06-08 08:39:57

标签: python django authentication ldap jwt

我正在创建使用JWT Auth的Web服务。我正在使用django-rest-framework-jwt  为了那个原因。我希望我的用户可以使用他们的ldap帐户进行身份验证。我发现有一个Django身份验证后端可以对LDAP服务进行身份验证。在django-rest-framework-jwt中进行身份验证的函数编码如下:

def authenticate_credentials(self, payload):
    try:
        user_id = payload.get('user_id')

        if user_id:
            user = User.objects.get(pk=user_id, is_active=True)
        else:
            msg = 'Invalid payload'
            raise exceptions.AuthenticationFailed(msg)
    except User.DoesNotExist:
        msg = 'Invalid signature'
        raise exceptions.AuthenticationFailed(msg)

    return user   

该功能在用户模型中查找以对用户进行身份验证。我认为即使我设置了ldap后端,它也永远不会工作。我对吗?如果是,我可以更改哪些内容能够使用JWT Auth并能够针对LDAP服务进行身份验证?

1 个答案:

答案 0 :(得分:5)

每个Django身份验证后端都有一个very simple API。通常,它们安装在AUTHENTICATION_BACKENDS设置中,但没有什么能阻止您手动使用它们:

from django_auth_ldap.backend import LDAPBackend

user = LDAPBackend().authenticate(username, password)

这假设用户使用用户名和密码进行身份验证。如果您需要通过其他方式对LDAP进行身份验证,那么您可能是您自己的。

要记住的一件事是每个身份验证后端都会创建/返回相同的用户模型对象。因此,假设用户已经过一次身份验证,则上面的基于user_id的代码应该与任何底层后端兼容。