IdentityServer密码长度超长会导致跳转到登录页

应用系统项目的安全要求越来越高,基本都是采取https等加密证书传输,无法使用https的,也是要求不能明文传输内容,因此做一些等保要求,密码需要加密后才能传输给服务端,所以前端会采取一些密码手段,保证一定的安全性。

项目集成的IdentityServer3实现账户和密码登录,如果前端做AES加密,同时要求密码长度不少于8位,这样把密码加密后,再通过传输,整个Password密码的长度会超过100个字符。然后在登录的时候,即使输入正确的密码,发现系统还是会跳转到登录页面,好像没有起到什么用,包括输入错误的密码。

问题原因:

1、可以查看IdentityServer3源码:InputLengthRestrictions

IdentityServer密码长度超长会导致跳转到登录页_第1张图片

 Password的InputLengthRestrictions长度是100。

2、AuthenticationController的方法LoginLocal里有句判断:

IdentityServer密码长度超长会导致跳转到登录页_第2张图片

  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;

你可能感兴趣的:(IdentityServer3,Password)