0

我有一个自定义登录,它返回一个加密的令牌,表示用户已登录。此令牌通过 QueryString 传递到另一个页面(Dash.aspx)。

Dash.aspx 从 QueryString 中获取令牌并将其发布到页面上的隐藏字段。Javascript 读取该值并将其保存在内存中。然后使用该令牌进行 Web 服务调用。当这些调用完成时,会返回一个新的 Token 值,并且 javascript 会存储该值(替换旧值)。

我想在登录后添加新页面以供访问。这些页面需要传递给它们的有效令牌。用户会从 Dash.aspx 移动到这些新页面之一并返回(因此母版页顶部只有几个不同的链接)

我不喜欢通过 QueryString 传递令牌。而且我不确定如何在页面更改可访问的地方更新令牌。如果可能的话,我想避免使用 Session 来存储和传递令牌

如何更谨慎地传递我的令牌并确保它始终传递最新的值?

我意识到这是一个相当广泛的问题,但我不知所措。我觉得可能有一些预先构建的想法可以处理这个问题,我只是不知道什么或如何使用它。

谢谢

更新

因此,要求提供一个示例:

第一步:用户登录->zholen/zholen123

  • 调用服务来验证用户名和密码 -> 返回 Token ('ABC')
  • 重定向到页面 Dash.aspx?token=ABC

第 2 步:Dash.aspx 从查询字符串中获取令牌并分配给页面上的隐藏字段

  • Javascript 对象从隐藏字段中获取令牌并在内部存储
  • JS 对象对各种服务进行多次异步调用,每个服务返回一个新的更新令牌,内部令牌更新为新值(令牌每 30 分钟过期

期望的新步骤

第 3 步:从 Dash.aspx 移动到 Account.aspx

  • Account.aspx 需要有效的令牌才能加载
  • 调用更多服务并更改Token

第 4 步:使用最新令牌从 Account 移动到 Dash.aspx


服务调用是通过 Web 服务 (asmx) 或通过页面方法进行的,具体取决于操作是否需要数据返回 (asmx) 或 html 返回(页面方法 -> 预填充数据的表)或页面加载

根据 Cookies 的建议,我认为可以在 C# 端的这些调用期间用新的令牌值重置 cookie,假设我可以从 ASMX 做那种事情并且整个事情的异步不会'不会引起问题。

此外,我可以使内部存储最新令牌的 JS 对象将该值放回隐藏字段,如果这有助于使其从 C# 端可访问。

4

1 回答 1

1

您可以使用 cookie...您可能希望使用中间加密,因为 cookie 可以从外部读取。

        //c#

        HttpCookie cookie = new HttpCookie("myTokenCookie");
        cookie.Value = tokenString;
        Response.SetCookie(cookie);

        // then get it back later
        s = Request.Cookies["myTokenCookie"].Value;

        // then you could write it into a hidden input for retrieval in JS
于 2012-05-08T21:39:46.757 回答