MVC在会话中保存令牌

Joh*_*rum 4 authentication asp.net-mvc session asp.net-membership

我正在调用一个服务,我需要在每次发出请求时传递用户的永久安全令牌.

为此,我已将此方法添加到我的基本控制器类:

protected UserData getUsr()
{
        try
        {
            UserData usr = new UserData();
            usr.SecurityToken = Session["secToken"].ToString();

            MembershipUser mvcUser = Membership.GetUser(HttpContext.User.Identity.Name);
            usr.Id = (int)mvcUser.ProviderUserKey;

            return usr;
        }
        catch (Exception ex)
        {
            log.Debug("Could not create usr object", ex);
            throw new Exception("Could not authenticate");
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里的问题是,有时User.Identity数据会超出会话数据,导致用户看到他们登录但随后他们的请求失败会发生奇怪的错误.

有没有更好的方法来存储此令牌/我可以存储它以便它会在User.Identity对象到期时到期吗?

此外,如果有人知道一些很好的基本理解示例/文档HttpContext和MVC授权过滤器将是伟大的.

VJA*_*JAI 5

我会去表单身份验证cookie本身存储用户的安全令牌.本FormsAuthenticationTicket类包含的UserData属性,你可以包括你更多的信息.

UserData属性中指定的值包含在身份验证票证cookie的一部分中,并且与其他票证字段一样,根据表单身份验证系统的配置进行加密和验证.

下面是一个文章所描述如何可以存储更多信息窗体身份验证Cookie.

是一篇很重要的文章,解释了将更多数据存储到表单身份验证中.cookie以及如何阅读它.代码是用VB编写的,格式不正确.您必须向下滚动到故障单中的步骤4:存储其他用户数据.

这个主题将为您提供一个快速回答如何UserData从cookie中读取的答案.

我会去创建一个ValueProvider这里描述的那个将从auth读取安全令牌的自定义.cookie和动作参数的提要.