ldap+flask+python2实现统一认证里面的那些编码神坑
首先想吐槽下,直接接手别人的项目,而且是经过四五个人手的项目,是怎么个痛苦。两三套代码django、flask、tornado应有尽有,代码里,掰开手指头就可数的全英文注释,几台服务器没交接清楚,所有的都是问了才说,正常应该一起工作一段时间,然并卵,交接完就不搭理。前半个月看代码,揣摩别人心思,凉凉~
这两天死磕一个问题,项目背景是实现一个账号密码登陆多个系统,有个同事改密码后其他系统都可以登陆,只有一个系统一直登不上。密码带中文标点符号,一顿改密码测试,果然有的中文标点符号过不了。但不是所有中文标点符号,部分特殊字符也过不了。迎合前端,服务器二次验证,用黑名单和白名单卡,正则如下:
# 正则判断中文字符
#pattern = u"[\uff1f\uff01\uff0c\u0026\uff1b\uff1a\uff08\uff09\u3008\u3009\u300e\u300f\u300c\u300d\ufe43\ufe44\u3014\u3015\u2026\uff5e\ufe4f\uffe5><]+" # 验证密码8-16位数字、大小写字母、半角字符3种组合
pattern = """^(?:(?=.*[0-9].*)(?=.*[A-Za-z].*)(?=.*[,\.#%'\+\*\-:;^_`&|"@=~{}\[\]\(\)\$<>\?/!].*))[,\.#%'\+\*\-:;^_`&|"@=~{}\[\]\(\)\$<>\?/!0-9A-Za-z]{8,16}$"""
显然这种只能让用户重新改密码,体验不太好。
换种思路,为什么改完密码其他系统都可以通过,只有一个不过,那就兼容那个系统。涉及中文大半概率与编码有关,使用python的朋友应该被编码坑过。
排查改密码经过的地方有3处:
1.改密码
def modify_password(conn, email, new_password, old_password=None):
if old_password is None and conn is None:
conn = bind_ad(ADMIN, ADMINPD)
conn.search(DC, '(&(objectclass=person)(mail={email}))'.format(email=email))
if not conn.entries:
return ''
user = conn.entries[0]
print('user',user)
dn = user.entry_dn
if SUPERVISOR:
# dn = user.entry_dn.encode('raw_unicode_escape')
# 此处改为utf-8
dn = user.entry_dn.decode('utf-8')
re = conn.extend.microsoft.modify_password(dn, new_password, old_password)
return re
2.检验老密码有没有绑定ldap
# 知道原密码改密码时会检测旧密码是否绑定ldap
old_password = passwd_reqparse.parse_args().oldpassword
#conn = bind_ad(email, old_password)
# 此处改为utf-8
conn = bind_ad(email, old_password.encode('utf-8'))
3.认证时
#文件行首添加
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# 默认ascii码,改为utf8
def parse_para(json_data):
"""解析用户输入的账号密码"""
password = json_data.get('password')
password_utf8 = password.encode('utf-8')
# return转码后的密码
return response_json, businessname, email, password_utf8, namepw, method
推荐个好用的工具查看ldap信息:LDAPBrowser

Unicode转换工具:http://tool.chinaz.com/tools/unicode.aspx

ldap+flask+python2实现统一认证里面的那些编码神坑的更多相关文章
- [原创]django+ldap+memcache实现单点登录+统一认证
前言 由于公司内部的系统越来越多,为了方便用户使用,通过django进行了单点登录和统一认证的尝试,目前实现了django项目的单点登录和非django项目的统一认证,中间波折挺多,涉及的技术包括dj ...
- [原创]django+ldap实现统一认证部分二(python-ldap实践)
前言 接上篇文章 [原创]django+ldap实现统一认证部分一(django-auth-ldap实践) 继续实现我们的统一认证 python-ldap 我在sso项目的backend/lib/co ...
- [原创]django+ldap实现统一认证部分一(django-auth-ldap实践)
前言 接之前我的文章,django+ldap+memcache实现单点登录+统一认证 ,ldap部署相关,ldap双机\LAM配置管理\ldap备份还原,目前来说,我们已经有了高可用性的ldap环境了 ...
- openvpn通过ldap或ad统一认证解决方案思路分享
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/986933 缘起:成 ...
- Linux下LDAP统一认证解决方案
Linux下LDAP统一认证解决方案 --http://www.cangfengzhe.com/wangluoanquan/3.html 转自:http://www.cnblogs.com/MYSQL ...
- LDAP实现企业异构平台的统一认证
LDAP实现企业异构平台的统一认证 技术是为应用服务的,没有应用,技术就无用武之地.同样光配置完LDAP服务器没有任何意义,只有把所有需要认证的环节,只有纳入LDAP系统中,才能使它发挥应有 ...
- LDAP+Gitea统一认证Git服务器账户管理openLdap和微软的ad
很多时候我们需要管理多个内容管理系统,比如Jira.Jenkins.GitEA/Gitlab等等各种管理系统,我们需要每一套管理系统每个人都管理一套密码,每套系统每套密码简直是一种灾难,于是LDAP可 ...
- #研发解决方案介绍#IdCenter(内部统一认证系统)
郑昀 基于朱传志的设计文档 最后更新于2014/11/13 关键词:LDAP.认证.权限分配.IdCenter. 本文档适用人员:研发 曾经一个IT内部系统配一套帐号体系和授权 线上生产环境里 ...
- kubernetes实战(十一):k8s使用openLDAP统一认证
1.基本概念 为了方便管理和集成jenkins,k8s.harbor.jenkins均使用openLDAP统一认证. 2.部署openLDAP 此处将openLDAP部署在k8s上,openLDAP可 ...
随机推荐
- leecode第五十九题(螺旋矩阵 II)
class Solution { public: vector<vector<int>> generateMatrix(int n) { )//特殊情况 { vector< ...
- 00-python-内置函数笔记
01.enumerate()函数用于将一个可遍历的数据对象(如 列表.元组或字符串)组合为一个索引序列,同时列出数据和数据包下标,一般用在for循环中 for i, element in enumer ...
- 【转载】HTML5 Audio/Video 标签,属性,方法,事件汇总
<audio> 标签属性: src:音乐的URL preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览器自带的控制条 Html代码 <au ...
- PHP加密函数
单向散列加密 单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出.这个散列计算是单向的,即不能对固定长度的输出进行计算从而获取输入信息. 特征:雪崩效应.定长输出和不可逆 作用: ...
- p1468 Party Lamps
就是模拟.同一个开关按2下相当于没按,那么,如果一共按0下,就是没按,按1下就是4个开关的1个,按2下可能相当于实际按了0下或按2下,按3下实际按了1下或3下,之后如果是奇数,相当于按1或3下,偶数相 ...
- Hadoop – The Definitive Guide Examples,,IntelliJ
IntelliJ Project for Building Hadoop – The Definitive Guide Examples http://vichargrave.com/intellij ...
- CentOS7 安装PHP7的redis扩展:
phpredis-4.2.0.tar.gz:下载:wget https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz $ tar -z ...
- 【转】XP系统远程桌面连接2012R2提示:远程计算机需要网络级别身份验证,而您的计算机不支持该验证
一.背景 因对方客户的服务器是内网的,需要操作更新服务器的数据库表信息,因此远程对方客户办公司的电脑远程服务器:但是在远程桌面连接出现问题. 二.错误问题 错误问题:“远程计算机需要网络级别身份验证, ...
- ubuntu 安装国际qq
下载地址::http://pan.baidu.com/s/1nt1Nu6P 解压后,输入终端:suao dpkg -i 解压的文件名称.deb 如果你前面安装过qq,你可以输入sudo dpkg -P ...
- token原理详解
概念与使用流程 是计算机术语:令牌,令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧.token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同 ...