Asp.net mvc MVC操作控制器生成一个带有令牌的url,供用户在不登录的情况下单击并查看页面

Asp.net mvc MVC操作控制器生成一个带有令牌的url,供用户在不登录的情况下单击并查看页面,asp.net-mvc,authentication,url,token,identity,Asp.net Mvc,Authentication,Url,Token,Identity,我需要向用户发送一个带有令牌的url,以便用户可以单击该链接并查看我的页面,而无需登录系统。此用户已在我的系统中创建,但尚未设置密码,我希望此用户不要看到其他页面,而只看到我允许的页面。 请帮我想出这方面的解决办法 谢谢大家。在数据库中创建一个表,如下所示 向特定用户发送链接时,在此表中插入条目。作为一个例子,这里我为userid10和userid12插入了两个条目 制作一个过程或函数,根据请求验证令牌 CREATE PROCEDURE sp_ValidateUserIdAndTokenId

我需要向用户发送一个带有令牌的url,以便用户可以单击该链接并查看我的页面,而无需登录系统。此用户已在我的系统中创建,但尚未设置密码,我希望此用户不要看到其他页面,而只看到我允许的页面。 请帮我想出这方面的解决办法


谢谢大家。

在数据库中创建一个表,如下所示

向特定用户发送链接时,在此表中插入条目。作为一个例子,这里我为userid10和userid12插入了两个条目

制作一个过程或函数,根据请求验证令牌

CREATE PROCEDURE sp_ValidateUserIdAndTokenId
    @UserId INT,
    @TokenId varchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    IF ISNULL(@UserId,0) <> 0 AND ISNULL(@TokenId,'') <> ''
    BEGIN

        IF EXISTS(SELECT 1 FROM UserToken WHERE UserID = @UserId AND TokenID = @TokenId)
        BEGIN

            Declare @TokenInsertedDateTime AS DateTime
            Declare @IsTokenExpired AS Bit

            SET @TokenInsertedDateTime = (SELECT TokenInserted FROM UserToken WHERE UserID = @UserId AND TokenID = @TokenId)
            -- Here Calculate the token time difference in minutes for one day i.e. 1440 minutes. 
            SET @IsTokenExpired = (SELECT CASE WHEN DATEDIFF(MINUTE, @TokenInsertedDateTime, GETDATE()+1) > 1440 THEN 0 ELSE 1 END)

            SELECT @IsTokenExpired


        END
    END
END

但如果你这样做了,你会看到我的页面。我想生成一个带有标记的url,这样只有收到url的人才能查看页面。我希望令牌过期一段时间。您可以在操作中添加令牌\u Id作为参数,并使用一些自定义逻辑(使用数据库进行验证)来标识令牌\u Id,因此根据此逻辑,您可以确定请求的URL是否需要继续。我理解您,这正是我需要的。但我不知道如何生成令牌并验证它。我有一个用户已经保存在系统中,这个用户有电子邮件和用户名(没有密码)。我需要给这个用户发电子邮件,其中包含一个url令牌,允许他们通过该令牌访问我系统中的某个页面。令牌将在特定时间间隔过期。请帮帮我,因为我是这项技术的新手。您是否将生成的令牌以某种关系保存在数据库中?我不是故意的。我想从电子邮件或用户ID生成令牌,然后将url+令牌发送给用户。当他们点击url标记进入我的页面时,我将检查标记是否有效,如果有效,将显示我的页面。简而言之,我想知道如何从电子邮件或userid生成令牌,以及当用户单击url令牌时如何测试令牌。
[HttpGet]
[AllowAnonymous]
public ActionResult Add(int userId, string tokenId)
{
   // Determine the request with tokenId and validate your tokenId
   // make the database call of created procedure or function and validate your userid and token here.
   return View();
}