Nat*_*ate 9 c# asp.net security authentication asp.net-web-api
我有一个现有的,工作的ASP.NET MVC 4 Web应用程序.我写了自己的RoleProvider,我正在使用标准的[Authorize]属性.我的控制器看起来像这样:
[Authorize(Roles="ContactAdmins")] //System.Web.Mvc
public ActionResult Index()
Run Code Online (Sandbox Code Playgroud)
我想在我的应用程序中添加一个WebAPI控制器,并利用我现有的管道
[Authorize(Roles="ContactAdmins")] //System.Web.Http
public IEnumerable<Contact> Get()
Run Code Online (Sandbox Code Playgroud)
这适用于我的网站内的Javascript ajax调用(因为浏览器用户已经使用Forms身份验证cookie进行了身份验证).我的问题来自C#控制台应用程序(或任何其他不属于我的Web应用程序的应用程序)如何对此API进行身份验证?
让我们假设对于我公开的API的部分,我使用的代码非常类似于在MVC3中使用WebApi这个问题.
var url = "http://localhost:9000/api/contacts";
using (var client = new WebClient())
using (var reader = XmlReader.Create(client.OpenRead(url)))
{
var serializer = new XmlSerializer(typeof(Contact[]));
var contacts = (Contact[])serializer.Deserialize(reader);
// TODO: Do something with the contacts
}
Run Code Online (Sandbox Code Playgroud)
我需要在这里修改什么?或者我是否必须废弃这个并使用完全不同的方法?我并不依赖于使用远程客户端的API身份验证表单,但我想保留当前优雅的方法,用于作为应用程序一部分的JavaScript客户端(只是请求API,因为表单cookie已设置).
有多种方法可以与控制台应用程序共享 cookie。看看这里的一些想法:
http://netpl.blogspot.com/2008/02/clickonce-webservice-and-shared-forms.html
另一个简单的选择是公开一个不需要任何身份验证的 Web 方法,获取用户名和密码并将 cookie 返回给客户端。
无论您采取什么方法,您的目标都是以某种方式在控制台应用程序端获取表单 cookie。从那里您可以轻松完成,因为您所做的就是将 cookie 附加到您的请求中。Web api 会愉快地接受 cookie。
| 归档时间: |
|
| 查看次数: |
5838 次 |
| 最近记录: |