【问题标题】:WebApi, iOS, and Forms Auth - can it work?WebApi、iOS 和 Forms Auth - 可以吗?
【发布时间】:2017-01-15 14:57:34
【问题描述】:

我有一个单页 Web 应用程序,它通过 AJAX 调用 WebAPI 层来提供所有数据。 Web 应用通过以下方式对端点进行身份验证和授权:

WebSecurity.Login(model.Username, model.Password)

这样,我可以使用 MembershipProvider 来确定谁可以访问每个控制器级别的内容:

[HttpGet]
[Route("api/adminwork")]
[System.Web.Http.Authorize(Roles = "Administrator")]
public HttpResponseMessage DoWork() {
    ApiResponseDto result = _adminService.DoAdminWork();
    return Request.CreateResponse(HttpStatusCode.OK, result);
}

我正准备构建一个使用相同 API 的 iOS 应用程序。我希望我可以使用表单身份验证 + 会员提供者的这种机制将 cookie 附加到来自移动应用程序的所有请求,以与来自网络应用程序的请求相同的方式有效地处理请求(并最大限度地减少我的工作)。

有什么方法可以让 iOS 应用程序使用 ASPX cookie 来实现这一点?

【问题讨论】:

    标签: c# ios asp.net cookies asp.net-web-api


    【解决方案1】:

    好吧,您可以使用 WebView 来处理带有 cookie 的内容,但我认为这是一种非常不合适的方式来验证 api 用户。不安全的方式。

    特别是,您应用的 MVC 部分可能会使用表单身份验证,它将凭据存储在 cookie 中。基于 Cookie 的身份验证需要使用防伪令牌,以防止 CSRF 攻击。这对 Web API 来说是个问题,因为 Web API 没有方便的方法将防伪令牌发送给客户端。 (有关此问题的更多背景信息,请参阅防止 Web API 中的 CSRF 攻击。)调用 SuppressDefaultHostAuthentication 可确保 Web API 不会受到来自存储在 cookie 中的凭据的 CSRF 攻击。

    您应该改用基于令牌的方法。 Consider adding OAuth methods to your middleware

    【讨论】:

    • 哎呀。看起来这会对我的应用程序架构产生很多影响。
    • 如何实施标头验证以防止这些攻击? asp.net/web-api/overview/security/…
    • 如果我理解正确的话,这是针对来自 MVC 的 AJAX 请求、服务器呈现的页面,而不是 SPA 或移动应用程序
    • 这适用于具有一个 MVC 呈现页面的 SPA,以及所有其他通过 AJAX 的请求
    • 完全正确。为什么要在移动设备上渲染它?我总是在 WebAPI 中使用令牌身份验证,非常适合 SPA 和任何其他客户端。
    猜你喜欢
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2014-09-29
    • 2016-09-26
    相关资源
    最近更新 更多