首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetworkCredentials与WebApi中的授权

NetworkCredentials与WebApi中的授权
EN

Stack Overflow用户
提问于 2013-06-13 09:23:22
回答 1查看 1.7K关注 0票数 2

我在尝试从一个使用ASP.NET的示例控制台应用程序连接到一个WebClient webapi服务(我自己正在运行)时遇到了一些问题。webapi是来自MVC4的典型示例站点:

代码语言:javascript
复制
public HttpResponseMessage Get()
{
    return Request.CreateResponse(HttpStatusCode.OK, new string[] { "value1", "value2" });
}

Controller使用自定义身份验证属性进行修饰:

代码语言:javascript
复制
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
    if (actionContext.Request.Headers.Authorization == null)
    {
        var response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
        response.Headers.Add("WWW-Authenticate", "Basic realm=\"localhost\"");
        actionContext.Response = response;
        return;
    }
}

客户端代码通常是:

代码语言:javascript
复制
 var wb = WebRequest.Create("http://localhost:64921/Values");
 wb.Credentials = new NetworkCredential("xxx", "xxx");

 var aaa = wb.GetResponse();
 Console.WriteLine(aaa);
 Console.ReadLine();

现在,我知道WebClientWebRequest应该在发送凭据之前等待401,而这正是我在这里所要做的。

不用说,在上面的设置中,什么都不起作用。我已经进入IIS配置,并更改了以下内容:

代码语言:javascript
复制
<basicAuthentication enabled="true" /> (in the security section)
<add name="BasicAuthenticationModule" lockItem="false" /> (in the modules section)

我遇到的问题是,即使在服务器代码被击中之前,401就会返回。我的意思是,如果我将一个断点插入Controller或属性中,它们就不会被击中。该错误的详细信息是关于IIS 401.2的通常长文本,我认为这与IIS有关,但是使用IIS而不是使用好的,我没有一个很好的GUI来修复这个问题。有人能帮忙吗?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 11:18:26

在IIS配置中,您已经启用了基本的auth处理,因此,如果没有凭据或凭据无效,IIS将返回401。

如果希望代码执行基本的auth处理,则需要告诉IIS允许匿名访问。

从注释编辑

如果您要求IIS执行基本操作,它将根据Windows帐户检查凭据。这将在服务器代码运行之前执行,因此不会命中自定义Auth筛选器。在本例中,返回的头将是正确的,您将看到WebClient执行双重请求(一个匿名请求,一个具有凭据)。如果WebClient不使用计算机或域帐户(站点所在的文件夹具有读取权限),请求将失败。

如果你想自己做身份验证/授权,你需要告诉IIS快件不要做任何事情,然后自己做.这基本上意味着保留配置中的所有内容(在您的情况下,恢复问题中显示的配置片段)并发送正确的标头,您已经这样做了。如果您调试,您将看到身份验证筛选器被击中两次,第一次是匿名的,它将进入If并生成您的HTTP401挑战响应,第二次它将以标准基本授权头:Basic <BASE64_ENCODED_CREDENTIALS>的形式具有凭据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17083527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档