Установка таймаута на 1 минуту в asp.net
Я хочу установить OTP на 1 минуту, чтобы он мог истечь через 1 минуту. Я отправляю OTP по электронной почте, и он работает, но срок действия OTP не истекает через 1 минуту.
ниже мой код.
Это файл.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net.Mail;
using System.Net;
namespace OTP_Generation
{
public partial class OTPThroughEmail : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Sent_OTP_Click(object sender, EventArgs e)
{
//generate otp
Random rand = new Random();
string digits = rand.Next(0, 999999).ToString("D6");
ViewState["otp"] = digits;
bool check = sendMail("Your OTP is :" + digits);
if (check)
{
msg.Text = "OTP sent successfully";
}
else
{
msg.Text = "Error in sending Email";
}
}
public bool sendMail(string msg)
{
bool check = false;
try
{
MailMessage mail = new MailMessage("myid@gmail.com", "myid@gmail.com");
mail.Subject = "Verify code";
mail.Body = msg;
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("my@gmail.com", "******");
smtp.EnableSsl = true;
smtp.Send(mail);
check = true;
}
catch (Exception e)
{
exception.Text = e.Message;
check = false;
}
return check;
}
protected void Verify_OTP_Click(object sender, EventArgs e)
{
if (textBox.Text.Equals(""))
{
msg.Text = "Please Enter the OTP";
return;
}
if(textBox.Text.Equals(ViewState["otp"].ToString()))
{
msg.Text = "OTP verified";
}
else
{
msg.Text = "OTP is wrong";
}
}
}
}
Это файл.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="OTPThroughEmail.aspx.cs" Inherits="OTP_Generation.OTPThroughEmail" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<label id="l" >Enter OTP digit</label>
<asp:TextBox ID="textBox" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Sent_OTP" Text="Sent OTP" runat="server"
onclick="Sent_OTP_Click" />
<asp:Button ID="Verify_OTP" Text="Verify OTP" runat="server"
onclick="Verify_OTP_Click" />
<br /><br />
<asp:Label ID="msg" runat="server" ></asp:Label>
<br />
<asp:Label ID="exception" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
Я также установил "sessionState" внутри "system.web" в файле Web.config как
<sessionState cookieless="false" timeout="1"></sessionState>
Когда я запускаю выше код OTP проверяется каждый раз. Я также пытался использовать Session(заменив ViewState на Session), но он выдает исключение NullReferenceException в следующей строке:
if(textBox.Text.Equals(Session["otp"].ToString()))
Я искал в Интернете, но не смог найти способ установить срок действия через 1 минуту. Я тоже попробовал это, но это не сработало.
Пожалуйста, помогите... Спасибо
1 ответ
Неправильно использовать Random для генерации OTP. Ознакомьтесь с алгоритмом TOTP (RFC 6238), который разработан специально для генерации OTP с ограниченным сроком действия.
Кроме того, примите во внимание, что отправка OTP по электронной почте не является реальной двухфакторной аутентификацией.
Возможно, для вашего случая OTPs в электронной почте и Random as generator будут в порядке, но в целом такой практики следует избегать.