1

我在 VS 2012 中使用实体框架代码优先和 WPF 应用程序作为客户端创建了 MVC 4 Web Api。

我目前正在努力解决的问题是我必须从客户端启用身份验证并授权用户访问 Api(例如:每个经过身份验证的用户都可以访问 GET 方法,但只有管理员可以使用 POST 或 DELETE)。我使用了 MVC 4 Internet 应用程序,因为已经包含表单身份验证,在我尝试从我的客户端应用程序登录之前它运行良好。在花了一些时间研究我的问题后,我意识到表单身份验证主要应该与网络浏览器一起使用。我什至找到了一些可能的解决方案,让它使用 CookieContainers 与 HttpClient 一起工作(例如:如何在 HttpClient 的 HttpRequestMessage 上设置 cookie),但对我没有任何作用。
在花了几个小时研究完成我想做的事情的方法之后,我觉得完全被卡住了。
我读过关于 SimpleMembershipprovider、BasicAuthentication、OAuth 和有人提到 Thinktecture.Identitymodel,但并不能真正决定哪种方法最有效.
如果在与网络浏览器以外的客户端连接时确实无法使用表单身份验证,那么最好的身份验证/授权方法是什么?

如果有人可以向我提供有关在这种情况下最有效的方法的提示,我将非常高兴,因为在研究了几个小时后,我只会变得越来越困惑。

提前感谢您的帮助!

4

1 回答 1

2

你应该能够很容易地做到这一点,但你还没有说出你的问题到底是什么。你是

  1. 由于您未登录,无法访问您的 Web api 操作;或者
  2. 无法使其强制执行授权(即您可以获得对操作的匿名访问)

对于第二种情况:

对在服务器端使用ASP.NET Web API 中的身份验证和授权以及在操作上强制执行不同角色的各种方法有一个很好的概述。

在使您的 ASP.NET Web API 安全中还有另一种适用于机器对机器的方法(即,您没有将其登录详细信息键入应用程序对话框的用户),但它没有t 专注于使用 SimpleMembershipProvider。它不使用框架 auth&auth 组件,而是使用令牌(请注意这种方法 - 滚动您自己的安全性非常非常难以做到正确)。

对于第一种情况:

从客户端,听起来您有一些用户与之交互的 C# 应用程序。如果是这种情况(而不是机器对机器的场景),那么您的基于表单的方法仍然是合适的,并且您正在使用 cookie 做正确的事情。方法是:

  • 要求客户在您的应用程序中输入他们的用户名和密码
  • 向 AccountsController 上的 LogIn 操作发送请求,这将返回您的身份验证 cookie、会话 cookie 等。
  • 存储从此(成功)登录返回的 cookie(或如果响应为“登录失败”则通知客户端
  • 然后在对 web api 的请求中使用这些 cookie

正如你已经在谈论 using HttpClient,我猜你知道你在做什么,所以没有提供代码示例。我不会使用HttpClient, 因为它的价值,但它可以让你通过财产HttpWebRequest保持共同点。CookieContainerHttpWebRequest.CookieContainer

于 2013-05-13T09:54:57.107 回答