【问题标题】:where to store user credentials in front end在前端存储用户凭据的位置
【发布时间】:2014-07-20 07:39:28
【问题描述】:

在登录算法中的 ASP.NET Web API 中,我有一个动作过滤器,它为每个用户生成一个令牌,前端通过在 Web 服务器中使用该令牌将该令牌发送回以对用户进行身份验证我可以获得当前用户到目前为止的信息每件事都运行良好,但是我有新的要求,即每个用户都与帐户有多对多的关系,这意味着同一用户可以存在于多个具有不同角色的帐户中,例如在帐户 1 中,他是帐户 2 中的管理员他是普通用户,所以我必须重新生成需要用户重新登录的令牌,我不希望他再次被重定向到登录页面。我的想法是将用户名和密码存储在 html 5 本地存储中,但我认为这是一种不好的做法。 她是我生成令牌的方式。

public override void OnActionExecuting(HttpActionContext actionContext)
{
    if (!actionContext.Request.Headers
           .Any(header => header.Key == "AuthorizationHeader"))
    {
        if (this.IsAnonymousAllowed(actionContext) == false)
        {
            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized, "Un Autherized");
        }
    }
    else
    {
        string token = actionContext.Request.Headers
         .Where(header => header.Key == "AuthorizationHeader")
         .First().Value.First();
        if (this.IsAnonymousAllowed(actionContext) == true)
        {
            return;
        }

        string passPhrase = System.Configuration.ConfigurationSettings.AppSettings["PassPhrase"];
        string ticket_string = Crypto.Decrypt(token, passPhrase);

        TicketData ticket = JsonConvert.DeserializeObject<TicketData>(ticket_string);

        if (ticket == null || ticket.Expiration < DateTime.Now)
        {
            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized, "UnAuthorized");
        }
        else
        {
            OurIdentity identity = (OurIdentity)ticket.TokenData.OurIdentity;

            System.Threading.Thread.CurrentPrincipal = new OurPrincipal
            {
                OurIdentity = identity,
            };
        }
    }
} 

【问题讨论】:

    标签: asp.net authentication asp.net-web-api


    【解决方案1】:

    您是对的,将用户名和密码保存在本地存储中是错误的。将其保存在客户端的任何位置都不好。

    通常会生成一个令牌并将其放入 cookie 中。该令牌与服务器上的记录相对应,在会话日志或数据库中。

    我强烈建议为此使用现有方法,例如 OAUTH Bearer tokens in this tutorial

    【讨论】:

    • 我将帐户 ID 存储在令牌中,但用户可以更改其帐户类型而无需重定向,这需要重新生成新令牌
    • 无需重定向。只需执行后台 http 请求并更新令牌。
    • 所以我应该做的是在帐户更改时向控制器发送请求,然后编辑令牌并将其发送回前端。为了给我,我是 asp.net 的新手
    • 只需使用jQuery post 在后台将请求发送到控制器并返回令牌。例如,将其保存在本地存储中,或者最好是 cookie。
    • 非常感谢我已经解决了我的问题,方法是在帐户更改时重新生成服务器令牌,从而解决了在客户端存储用户凭据的问题。
    【解决方案2】:

    据我了解,如果您要存储哈希(可能使用盐以提供额外保护),那么存储凭据并不是一件坏事。无论如何,这些都必须在一天结束时存储在某个地方。

    【讨论】:

    • 但绝对不在客户端。
    • 我会说这取决于服务器如何验证客户端?如果任何人都可以随意获取这些内容并将其发送到服务器,我可以看到问题,但我不会。我错过了什么重要的东西吗?
    • OP 正在讨论将普通凭据(用户名/密码)保存到可以访问浏览器的任何人都可以访问的位置(本地存储)。
    猜你喜欢
    • 2018-05-24
    • 2016-07-19
    • 2013-11-06
    • 1970-01-01
    • 2015-01-08
    • 2020-03-05
    • 2013-06-25
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多