【问题标题】:WCF REST Service - 401 UnauthorizedWCF REST 服务 - 401 未经授权
【发布时间】:2011-08-17 15:45:54
【问题描述】:

我们正在开发 WCF REST Web 服务,它只接收来自任何匿名用户的任意文本,然后在后端执行一些处理。

例如,这是我们网络服务中的一种方法:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class MyRESTService : IMyRESTService
{
    [WebInvoke(Method = "PUT", UriTemplate = "/MyRESTMethod?paramA={paramA}&paramB={paramB}")]
    public Stream MyRESTMethod(string paramA, string paramB, Stream rawData)
    {
        //do some stuff...
    }
}

如果我们只使用默认的 IIS 设置,我们会得到一个(401) Unauthorized。然而,经过多次试验和错误,我们发现我们可以通过在实际的.svc 文件上为我们的服务授予对“所有人”的 WRITE 访问权限来使其工作。

我的问题是:为什么 IIS 需要对 .svc 文件具有 WRITE 访问权限才能使其工作?有没有更好的方法,还是我坚持使用这种骇人听闻(可能不安全)的解决方法?

WTF 微软?

可能相关:

【问题讨论】:

  • 访问权限不一定要授予“所有人”。相反,经过身份验证的用户必须拥有这些权限。对于匿名访问,这是 IUSR。

标签: wcf iis rest iis-7 http-status-code-401


【解决方案1】:

我还发现这可以通过放置来解决

<authentication mode="None" /> 内的 <system.web> 在您的 web.config

【讨论】:

  • 这对我也有帮助,但安全吗?
  • 取决于您的环境。就我而言,我们相信网络是安全的,也许这就足够了。如果你需要在服务之间直接认证,显然这将是一个问题。
【解决方案2】:

在与 M$ 的技术代表交谈后,我得知这确实是预期的行为。该服务必须启用写入权限,以便某人向其发送请求,并且当您执行此操作时,它实际上也会自动在 .SVC 文件上设置写入权限。

【讨论】:

  • 你拯救了我的一天!顺便说一句:再想一想,这确实有点道理:当您在资源上请求 PUT 时,该资源必须允许写入访问。现在,我猜想带有 WCF 的 REST 可能已实现,这样 IIS 将 PUT /foobar.svc/some/path 解释为 /foobar.svc 上的 PUT 请求,并将“/some/path”部分转发给 WCF 以供进一步解释。因此,对于 IIS,这是对 /foobar.svc 的 PUT 请求 - 在 HTTP 中:您想要修改 foobar.svc
猜你喜欢
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2017-11-10
  • 2017-02-23
  • 1970-01-01
相关资源
最近更新 更多