应用系统项目的安全要求越来越高,基本都是采取https等加密证书传输,无法使用https的,也是要求不能明文传输内容,因此做一些等保要求,密码需要加密后才能传输给服务端,所以前端会采取一些密码手段,保证一定的安全性。
项目集成的IdentityServer3实现账户和密码登录,如果前端做AES加密,同时要求密码长度不少于8位,这样把密码加密后,再通过传输,整个Password密码的长度会超过100个字符。然后在登录的时候,即使输入正确的密码,发现系统还是会跳转到登录页面,好像没有起到什么用,包括输入错误的密码。
问题原因:
1、可以查看IdentityServer3源码:InputLengthRestrictions
Password的InputLengthRestrictions长度是100。
2、AuthenticationController的方法LoginLocal里有句判断:
if (model.Username.Length > options.InputLengthRestrictions.UserName || model.Password.Length > options.InputLengthRestrictions.Password)
{
Logger.Error("username or password submitted beyond allowed length");
return await RenderLoginPage(signInMessage, signin);
}
也就是如果密码长度超过100会自动判断到登录页面。
解决方案:
将密码的InputLengthRestrictions设置长一点,比如1000字符等,如下图:
可以在项目初始化的时候,配置IdentityServerOptions属性,设置InputLengthRestrictions.Password = 1000即可。
IdentityServerOptions.InputLengthRestrictions.Password = 1000;