我开发了一个应用程序,允许用户登录以完成不同的任务。但是,我正在使用现有的dnn数据库进行登录;我已经认识到门户网站使用加密存储密码,但我无法获得用于加密密码的源代码,以便用户输入的密码与dnn数据库中的密码相匹配。我怎么能绕过这个? DNN版本是04.09.05
更新
try
{
//validate username/password combination
DotNetNuke.Entities.Users.UserInfo myUser = new DotNetNuke.Entities.Users.UserInfo();
DotNetNuke.Security.Membership.UserLoginStatus userLoginStatus = new DotNetNuke.Security.Membership.UserLoginStatus();
myUser = DotNetNuke.Entities.Users.UserController.ValidateUser(myPortal, myUsername, myPassword, "", "", "", ref userLoginStatus);
if (userLoginStatus == DotNetNuke.Security.Membership.UserLoginStatus.LOGIN_SUCCESS ||
userLoginStatus == DotNetNuke.Security.Membership.UserLoginStatus.LOGIN_SUPERUSER)
{
//login the user ...
DotNetNuke.Entities.Users.UserController.UserLogin(PortalId, myUser, "", "", true);
Response.Redirect("~/Home/Welcome.aspx");
}
else
{
lblError.Text = "Invalid Username or Password";
}
}
catch (Exception ex)
{
lblError.Text = "Error!! " + ex.Message.ToString();
}
}
答案 0 :(得分:0)
DNN 4.9.5的源代码可用,您有几个选择。
您可以将服务部署到4.9.5安装,将登录作为外部应用程序的API公开。这样您就可以按预期使用DNN 4.x API,也不需要自定义规避,这对您来说也很有用。
您可以查看来源并从UserController.ValidateUser
中提取登录代码,然后在您的代码中重新执行此操作。密码salting和加密过程是标准ASP.NET Membership的过程。您最关心的是,您需要在DNN和DNN之间保持机器密钥值相同。另一个申请
另外,仅仅是因为评论中提到了它。如果这是公开的,我强烈建议升级。有超过30个安全漏洞适用于您当前的DNN版本。