验证
Web API 假设身份验证发生在主机中。 IIS 使用 HTTP 模块进行身份验证。 asp.net 现在允许您通过 web.config 配置 IIS 或 ASP.NET 中内置的任何身份验证模块,或者编写您自己的 HTTP 模块来执行自定义身份验证。
您可以同时使用多个身份验证,这不是问题。
在你的情况下,你需要Windows 身份验证和匿名身份验证。
Windows 身份验证将secure您的网站,匿名身份验证将open您的 Web API。
在 IIS 中配置身份验证
托管在 IIS Express 上打开“属性”窗格(通过 F4,而不是项目的属性),然后应用所需的身份验证
将“匿名身份验证”设置为“禁用”。
将“Windows 身份验证”设置为“启用”。
托管在 IIS 7 或更高版本上在 IIS 管理器中,打开功能视图中的身份验证功能。启用/禁用所需的身份验证。如果身份验证系统不是一个选项(例如 Windows),您需要通过服务器管理器(添加角色服务)安装它。
授权
ASP.NET授权
在 ASP.NET 中,有两种方法来授权对给定资源的访问:文件授权和 Url 授权。我不会在这里解释,但你可以阅读这个article http://msdn.microsoft.com/en-us/library/wce3kxhd%28v=vs.100%29.aspx.
重要的是您可以在 web.config 中允许/拒绝用户和/或组。
Windows 身份验证中的默认配置是仅允许身份验证用户 *****,如下所示:
<authorization>
<deny users="?" ></deny>
</authorization>
如果您想允许匿名用户?在 url 位置“api”下,添加以下内容:
<location path="api">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
网页API授权
asp.net Web Api 授权发生在管道的后期,更靠近控制器。这使您可以在授予资源访问权限时做出更精细的选择。
Web API提供内置的授权过滤器,授权属性 http://msdn.microsoft.com/en-us/library/system.web.http.authorizeattribute.aspx。还有一个允许匿名属性 http://msdn.microsoft.com/en-us/library/system.web.http.allowanonymousattribute.aspx。
您可以在全局、控制器或操作上使用它。
默认情况下,所有操作都是授权的.
测试API
通过浏览器
集成 Windows 身份验证适用于任何支持协商身份验证方案的浏览器。它是 Internet Explorer 和现在的 Chrome 的 cas:当使用 Windows 身份验证浏览网站时,它们将自动提供 Windows 凭据。 Firefox不支持这种方案,所以我经常用这个浏览器测试身份验证。
通过 HttpClient调用 Web Api(如浏览器)时,您的 HttpClient 需要提供凭据。这是通过配置具有适当凭据的 HttpClientHandler 来完成的。
//use default credentials aka Windows Credentials
HttpClientHandler handler = new HttpClientHandler()
{
UseDefaultCredentials = true
};
//use username/password credentials
HttpClient client = new HttpClient(handler);
var handler = new HttpClientHandler {
Credentials = new NetworkCredential(username, password)
};
var httpClient = new HttpClient(handler);
希望对你有帮助。
在你的例子中最后一件重要的事情是你的 Web Api根本不允许匿名用户!因为你正在使用默认凭证在您的 HttpClientHandler 中,这意味着您的服务需要 Windows 身份验证。您不必在开放和公共服务中配置任何凭据。