我需要开发一个 iPhone 客户端来使用来自某处的 JSON 数据。我选择了 MS 的 Web API,因为它看起来很简单,但在验证用户身份时,事情变得非常令人沮丧。
我很惊讶我无法找到一个清晰的示例来说明如何从登录屏幕到使用Authorize
属性超过我的ApiController
经过几个小时的谷歌搜索后的方法。
这不是一个问题,而是要求提供一个如何准确执行此操作的示例。我查看了以下页面:
- 确保 ASP.NET Web API 的安全 http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/
- 使用 ASP.NET Web API 进行基本身份验证 http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/
尽管这些解释了如何处理未经授权的请求,但它们并没有清楚地展示诸如LoginController
或类似的东西来请求用户凭据并验证它们。
有人愿意写一个简单的例子或给我指出正确的方向吗?
我很惊讶在经过几个小时的谷歌搜索后,我仍然无法找到一个清晰的示例来说明如何从登录屏幕一直到在我的 ApiController 方法上使用 Authorize 属性来对用户进行身份验证。
那是因为您对这两个概念感到困惑:
The Authorize
MVC中的属性用于应用访问规则,例如:
[System.Web.Http.Authorize(Roles = "Admin, Super User")]
public ActionResult AdministratorsOnly()
{
return View();
}
上述规则仅允许用户在Admin and 超级用户访问该方法的角色
这些规则也可以在 web.config 文件中设置,使用location
元素。例子:
<location path="Home/AdministratorsOnly">
<system.web>
<authorization>
<allow roles="Administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
但是,在执行这些授权规则之前,您必须已通过当前网站的身份验证.
尽管这些解释了如何处理未经授权的请求,但它们并没有清楚地展示诸如 LoginController 之类的东西来请求用户凭据并验证它们。
从这里,我们可以将问题一分为二:
-
在同一 Web 应用程序中使用 Web API 服务时对用户进行身份验证
这将是最简单的方法,因为您将依赖于ASP.Net 中的身份验证 http://msdn.microsoft.com/en-us/library/eeyk640h.aspx
这是一个简单的例子:
网页配置
<authentication mode="Forms">
<forms
protection="All"
slidingExpiration="true"
loginUrl="account/login"
cookieless="UseCookies"
enableCrossAppRedirects="false"
name="cookieName"
/>
</authentication>
用户将被重定向到帐号登录路由,您将在那里呈现自定义控件来询问用户凭据,然后您将使用以下命令设置身份验证 cookie:
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
-
跨平台认证
这种情况是当你仅在 Web 应用程序中公开 Web API 服务因此,您将有另一个客户端使用这些服务,该客户端可以是另一个 Web 应用程序或任何 .Net 应用程序(Win Forms、WPF、控制台、Windows 服务等)
例如,假设您将从同一网络域(Intranet 内)上的另一个 Web 应用程序使用 Web API 服务,在这种情况下,您可以依赖 ASP.Net 提供的 Windows 身份验证。
<authentication mode="Windows" />
如果您的服务暴露在 Internet 上,那么您需要将经过身份验证的令牌传递给每个 Web API 服务。
欲了解更多信息,请阅读以下文章:
-
http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/ http://stevescodingblog.co.uk/basic-authentication-with-asp-net-webapi/
-
http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/ http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)