如何在ASP.NET中使用基本身份验证公开简单的Web服务

时间:2017-02-14 17:44:27

标签: c# asp.net web-services wcf soap

我维护一个ASP.NET Web API项目,该项目支持客户端将XML数据发布到我们的服务器的简单REST端点。此站点设置为支持BasicAuthentication并且运行良好。我们所有的安全检查都是在网络防火墙和机器本身使用自定义Windows用户帐户完成的。最近,我们的一个客户要求我们支持SOAP端点来接收XML数据。

我的想法是简单地添加一个新的WebService(Blah.svc),其支持接口具有所需的[ServiceContract][OperationContract]属性到我的界面。我原本希望我可以简单地将URL暴露给我们的客户端,它会#34;只是工作"。我 am 能够达到终点,但此服务无法提取用户名。

以下是我的示例代码:

public string CreateWorkItem(string xml)
{
    var userName = HttpContext.Current.User.Identity.Name;
    if (string.IsNullOrEmpty(userName))
        userName = "NO USER NAME";

    var elem = XElement.Parse(xml);
    return $"Hello [{userName}]! You sent [{elem.Value}].";
}

以下是我的结果:

Soap call shows no user name

我已经搜索过网络,试图找出如何在Soap消息中访问BasicAuthentication详细信息,但我没有运气。我发现的所有示例都要求我创建一个新的WCF项目并使用大量web.config设置公开它,或者这些示例使用较旧的技术大约5年。

我喜欢这项服务,只需使用Visual Studio中的发布... 选项即可使用我的WebAPI项目进行发布。不幸的是,我还没有找到让它发挥作用的共同点。我确定我错过了一些东西,我希望有人可以提供帮助。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

点击此链接:WCF Services and ASP.NET

简而言之,您需要在WCF服务中启用ASP.NET Compatibility

但是,您可能希望查看使用OperationContext.Current.ServiceSecurityContext。*

答案 1 :(得分:-1)

HttpContext.Current.User.Identity.Name返回null的事实意味着:

  1. 用户为null;或
  2. 用户为Anonymous
  3. 我有一些想法可以帮助您解决问题。

    1。您的User.Name实际上是null

    您可能希望通过抓取HttpContext.Current.User进行调试,看看它是否正确。

    2。直接:通过参数

    获取cookie

    尝试将HttpContext作为参数传递,以便获取cookie?

    public string CreateWorkItem(HttpContext context, string xml)
    {
        var username = context.Current.User.Identity.Name;
        ...
    }
    

    3。您的配置设置不正确

    替代方案是,您的web.configGlobal.asax可能未正确设置。