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

Posted

技术标签:

【中文标题】使用 JWT Auth 对 LDAP 服务进行身份验证【英文标题】:Use JWT Auth for authenticate against LDAP service 【发布时间】:2014-07-29 01:21:18 【问题描述】:

我正在创建一个使用 JWT Auth 的 Web 服务。我正在使用 django-rest-framework-jwt 为了那个原因。我希望我的用户可以使用他们的 ldap 帐户进行身份验证。我发现有一个针对 LDAP 服务进行身份验证的 Django 身份验证后端。在 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   

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

【问题讨论】:

Hunsu,您是否能够按照 psagers 的建议集成 JWT auth 和 LDAP。我也有同样的情况,我会试试的。 @ankittyagi 那是不久前的事了,我真的不记得了,但当我接受了我认为我接受的答案时(或者至少它确实帮助了我)。 【参考方案1】:

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

from django_auth_ldap.backend import LDAPBackend

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

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

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

【讨论】:

以上是关于使用 JWT Auth 对 LDAP 服务进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

nginx_ldap_auth和自定义身份验证页面

Auth0 - 在 Owin 上使用带有承载访问令牌的 JWT 使用 RS256 进行身份验证

使用 SockJS 提供 auth 标头

Spring 5 LDAP 身份验证和 JWT 令牌作为响应

使用 Spring 和 JWT 进行基于令牌的身份验证

使用 JWT 对 Angular Universal 进行身份验证