【问题标题】:(Ajax) Authenticate MVC Website user using a WebAPI(Ajax) 使用 Web API 验证 MVC 网站用户
【发布时间】:2023-04-05 18:36:01
【问题描述】:

试图搜索这个结果很多很多关于保护 WebAPI 以及如何保护 MVC 应用程序的结果,但我找不到解决方案。

我想要达到的目标: 我有一个带有模式登录表单的 MVC 网站, 当用户在表单中输入他的凭据时,一个 Ajax 请求将发送到带有凭据的 WebAPI。 WebAPI 应该返回(我猜是一张票,因为那是我找到的)。 然后票会被保存到浏览器的 sessionStorage 中(没有 cookie), 对网站的每个页面请求都会检查令牌,并启用/禁用需要保护的部分。

我发现的所有示例都显示了仅 MVC 身份验证, 或 WebAPI 身份验证,但我找不到执行上述操作的任何内容。

【问题讨论】:

    标签: ajax asp.net-mvc asp.net-web-api2


    【解决方案1】:

    sessionStorage 仅供客户端使用。您可以使用 Javascript 从存储中操作或检索值,但不能直接从服务器读取数据。由于 MVC 通常在服务器端呈现 HTML 视图,因此您无法在每次请求时发送存储在 sessionStorage 中的令牌。

    您描述的情况是一种混合解决方案,如果不使用 cookie 就无法实现。

    一个简单的解决方案是在登录阶段在 Web API 端点发出的 cookie 中设置登录数据(特别是令牌,如果您将使用基于令牌的方法)。

    【讨论】:

    • 什么?我认为您想念我的要求...请尝试再次阅读该问题。我很清楚所涉及的技术。为什么我要将数据保存到 cookie 而不是 sessionStorage?什么会限制我从 sessionStorage 读取令牌并根据请求发送它?发送的 cookie 和令牌有什么区别?
    • 另外,您将如何在 Ajax 请求中存储由 WebAPI 生成的 cookie?如果你已经这样做了,为什么你需要一个 cookie 而不是一个令牌?
    • 事实是浏览器会在每次请求时自动将cookie发送到服务器。如果您将令牌存储在 sessionStorage 中,您可以使用 javascript 访问其内容,如果您将使用 AJAX 执行进一步的请求,这是完全可以的,但如果您使用某种服务器端框架(如 MVC)则不行。如果您单击网页内的链接,则无法在标头内发送令牌。
    • 很确定我在标题中写了 AJAX。通过回复你,我实际上认为我有一个想法。当链接被点击时,一个Query参数可以发送Token,该页面将验证该token,如果token无效则显示Login/Register页面,如果token有效则只显示页面。
    • 好吧,我现在很困惑。您谈到了用于身份验证过程的 AJAX 请求,但随后您说每个 page 请求都会检查令牌,所以我假设 AJAX 请求只是第一个请求(带有凭据)。
    猜你喜欢
    • 2020-03-25
    • 2015-01-02
    • 2017-11-21
    • 2019-06-19
    • 2020-08-04
    • 1970-01-01
    • 2012-06-28
    • 2020-07-29
    • 2020-08-24
    相关资源
    最近更新 更多