创建Intranet应用程序,其中URL将通过电子邮件(outlook)发送给用户。此URL应使用密码生成(需要基于其电子邮件/ Emp ID的randon URL),并且通过此URL用户应该能够登录帐户。该链接还应具有时间有效性。示例:链接在7天后过期。
我有什么? 用户的电子邮件和员工ID。
任何指针,如何在C#中实现上述任务?或任何其他想法,因为我只需要用户使用电子邮件访问应用程序一段时间。
答案 0 :(得分:0)
好像你有点混淆了。无法使用ID或emai加密URL。将员工ID或电子邮件用作关键字几乎没有意义,因为它们是公共信息。
您可以做的是为URL创建一个随机字符串,并使用这两个信息来生成字符串。但是,一旦他们访问该网址,您就需要向他们询问密码密码才能登录。只需访问该网址并输入他们的电子邮件,您就无法获得安全保护。如果您有权访问电子邮件/员工ID(您必须承担所有权限),那么通过暴力破解此类系统是微不足道的。
对于基于电子邮件的URL,您可以xor两个字符串并发送输出。然后使用电子邮件xor输出并获取网址。
public static string xorIt(string email, string url)
{
StringBuilder sb = new StringBuilder();
for(int i=0; i < input.Length; i++)
sb.Append((char)(url[i] ^ email[(i % key.Length)]));
String result = sb.ToString ();
return result;
}
检查有效性的方法是将URL与时间戳一起存储在数据库中,并在登录时检查它是否仍然有效。
上述方法有一些注意事项(例如,xor总是为相同的两个字符串生成相同的输出,但如果您添加随机字符串并将该字符串存储在上表中,则可以解决此问题。)
答案 1 :(得分:0)
你无法将其锁定到他们的电子邮件中,因为他们只能复制和发送电子邮件。将URL粘贴到浏览器中。
基本上为了获得时间敏感的行为,您需要具备以下条件:
生成URL部分很简单,在伪代码中你可以设想它是这样的:
var user = GetUser("John.Doe@gmail.com");
var token = EncryptAndHashEmailAddress(user);
var entry = new TokenTableEntry(token:token, expires:DateTime.Now.AddDays(7), User: user.Id);
var url = @"https://www.mywebsite.com/login.aspx?token=" + token;
然后当用户点击链接并点击登录请求的任何句柄时:
var token = GetQueryParameter(0); // Get first query parameter
var entry = TokenTable.Element(e => e.Token == token);
TokenTable.Remove(entry);
if (DateTime.Now > entry.Expires)
{
// Their token has expired
GoTo("TokenExpired.aspx");
return;
}
LoginController.UserLoggedIn(entry.Id);
这是非常粗糙的伪代码,但它应该让你走在正确的轨道上。