C# 使用MVC web应用程序中的URL令牌对用户进行身份验证

C# 使用MVC web应用程序中的URL令牌对用户进行身份验证,c#,.net,asp.net-mvc-4,C#,.net,Asp.net Mvc 4,我想向现有的MVC4Web应用程序添加一个用户身份验证流,用户将在其中单击包含URL令牌的电子邮件中的链接。这将使他进入应用程序并自动登录。 此令牌可以添加到任何现有请求中,以允许透明登录 在框架中,什么位置是添加令牌检查的正确位置 求你了我知道此功能的安全风险。因此,请不要分析这方面的安全性 我想听听这个功能的可能实现最干净的方法可能是实现一个自定义的ActionFilterAttribute,并将其添加到全局过滤器列表中 比如: [Attribute] public class TokenL

我想向现有的MVC4Web应用程序添加一个用户身份验证流,用户将在其中单击包含URL令牌的电子邮件中的链接。这将使他进入应用程序并自动登录。 此令牌可以添加到任何现有请求中,以允许透明登录

在框架中,什么位置是添加令牌检查的正确位置

求你了我知道此功能的安全风险。因此,请不要分析这方面的安全性


我想听听这个功能的可能实现

最干净的方法可能是实现一个自定义的
ActionFilterAttribute
,并将其添加到全局过滤器列表中

比如:

[Attribute]
public class TokenLoginAttribute : AuthorizeAttribute
{
    public overrides void OnAuthorization(AuthorizationContext filterContext)
    {
        // Perform your authorization / login based on token here
    }
}
App\u Start\FilterConfig.cs
中:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new TokenLoginAttribute());
}

希望有帮助

最干净的方法可能是实现自定义的
ActionFilterAttribute
,并将其添加到全局过滤器列表中

比如:

[Attribute]
public class TokenLoginAttribute : AuthorizeAttribute
{
    public overrides void OnAuthorization(AuthorizationContext filterContext)
    {
        // Perform your authorization / login based on token here
    }
}
App\u Start\FilterConfig.cs
中:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new TokenLoginAttribute());
}

希望有帮助

该链接将指向同一个MVC操作,还是您将允许该URL令牌对任何请求进行身份验证?没有?这是最不安全的事情。。除非这是一个一次性使用令牌,它仍然可以被拦截。正确的位置很可能离应用程序的任何部分都很远。链接很容易复制/粘贴,您的用户甚至可以在不知道将要发生什么的情况下共享它们。请注意,这部分是由知名应用程序所做的工作形成的期望——如果我给你一个指向我Gmail收件箱的链接,它将不适用于你。我以前没有实现过这一点,但我假设你将有一个面向公众的操作,该操作将以令牌作为参数,然后将其与同样包含令牌的用户的数据库条目进行比较。如果它是有效的,则重定向。@Mystere Man这将是一次性的,或有限时间的令牌。该链接将指向同一个MVC操作,还是您将允许该URL令牌对任何请求进行身份验证?没有?这是最不安全的事情。。除非这是一个一次性使用令牌,它仍然可以被拦截。正确的位置很可能离应用程序的任何部分都很远。链接很容易复制/粘贴,您的用户甚至可以在不知道将要发生什么的情况下共享它们。请注意,这部分是由知名应用程序所做的工作形成的期望——如果我给你一个指向我Gmail收件箱的链接,它将不适用于你。我以前没有实现过这一点,但我假设你将有一个面向公众的操作,该操作将以令牌作为参数,然后将其与同样包含令牌的用户的数据库条目进行比较。如果有效,则重定向。@Mystere Man这将是一次性或有限时间的tokenActionFilter将不起作用,因为AuthenticationFilters在ActionFilter之前运行,如果未经身份验证,它们将被拒绝。除非你想在一个不需要身份验证的操作上实现它。这取决于他的过滤器配置中属性的顺序。但是你是对的,定制的
AuthorizeAttribute
可能是一个更好的解决方案。不,它不是。无论顺序如何,AuthorizationFilters始终在ActionFilters之前执行。ActionFilter将不起作用,因为AuthenticationFilters在ActionFilter之前运行,如果未经身份验证,它们将被拒绝。除非你想在一个不需要身份验证的操作上实现它。这取决于他的过滤器配置中属性的顺序。但是你是对的,定制的
AuthorizeAttribute
可能是一个更好的解决方案。不,它不是。无论顺序如何,AuthorizationFilters始终在ActionFilters之前执行。