Djangosaml2对用户进行身份验证,但我在视图中获得匿名用户

2024-10-01 17:31:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用djangosaml2对我的用户进行身份验证。我已经用了很长时间了,没有问题。我目前正在将Python和Django升级到新版本,身份验证不再有效

使用这些日志,我看到djangosaml2中的身份验证是成功的,但在我看来,request.user是一个匿名用户

以下是我使用的工作和非工作库版本:

  • Python:2.7-->;3.8
  • Django:1.9-->;1.11
  • djangosaml2:0.17.2(在两个EVN中)
  • pysaml2:4.0.5-->;6.5.1(也用4.0.5测试)

其他信息:

我看到对/saml2/acs/的调用重定向到/(访问我的站点),响应包括session_id

下一个对/的HTTP调用包括接收到的会话id

但是在数据库中我没有看到此会话id。 由于在数据库中找不到会话id,因此它确实被认为是匿名的

为什么没有存储会话id


Tags: django用户gt版本身份验证信息id数据库
1条回答
网友
1楼 · 发布于 2024-10-01 17:31:46

在saml2中,由于某些其他原因,我在post-authenticate方法中删除了用户的pwd,因此出现了问题。该PWD不是用户知道的,因此没有造成任何伤害

结果表明,该库创建了一个用于计算会话哈希代码的密码,即使用户本身不知道该PWD

使用此PWD计算会话哈希。当与计算的散列(基于用户已删除的PWD)进行比较时,结果为假-导致刷新会话(由于没有会话,用户是匿名的)

这种行为并不新鲜。那么,为什么它以前能工作呢

在较旧的Django版本中,get_用户(在contrib.auth.init)用于检查具有以下条件的哈希:

if ('django.contrib.auth.middleware.SessionAuthenticationMiddleware'
                in settings.MIDDLEWARE_CLASSES and 
                hasattr(user, 'get_session_auth_hash')):

由于未设置SessionAuthenticationMiddleware,因此不满足此条件,并且未检查哈希

在较新版本中,此中间件已被弃用,新的get_user条件只是第二个:

if hasattr(user, 'get_session_auth_hash'):

导致会话验证检查哈希并失败

我改变了我的后认证方法,现在不删除pwd和所有作品

相关问题 更多 >

    热门问题