使用Azure App Service中托管的WCF服务时出现凭据错误

时间:2018-08-24 23:18:54

标签: c# azure wcf authentication

我已经使用“云服务>> WCF Web角色”创建了WCF服务(如下所示)。 (这只是我进行的一项测试练习,以确保WCF可以托管在Azure App Service中,并可以通过使用C#作品创建的外部App进行连接。

[在此处输入图片描述] 1

我的WebConfig如下:

<?xml version="1.0"?>
<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiagnostics">
          <!--<filter type="" />-->
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  
  <system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <authentication mode="None"/>
  </system.web>
  
  <system.serviceModel>

    <!--DECLARE BINDINGS-->
    <bindings>
      <wsHttpBinding>
        <binding name="CustomBinding"
          openTimeout="00:20:00"
          receiveTimeout="00:20:00" closeTimeout="00:20:00"
          sendTimeout="00:20:00" >
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message algorithmSuite="Default" clientCredentialType="None"/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

    <!--DECLARE BEHAVIOUR-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CustomBehaviour">
          <!-- To avoid disclosing metadata information, set the value below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <!--CREATE SERVICE WITH ENDPOINTS-->
    <services>
      <!-- Service For Main Implementation-->
      <service name="DolphinBimUserRegistration.Service1" behaviorConfiguration="CustomBehaviour">
        <endpoint address="DBWsHttp" binding="wsHttpBinding" bindingConfiguration="CustomBinding" contract="DBIMInterface.IDBIMService"/>
      </service>
    </services>
    
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
    -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

将WCF服务发布到Azure App Service之后,我可以创建服务引用。到这里为止一切都很好。

在调试期间,当我尝试在WCF服务中调用基本的“ GetData”功能时,它经常会请求用户凭据(如下图所示)。

enter image description here

我需要找到一种无需手动输入凭据即可访问我的Azure Web应用程序服务的方法。我一直在努力解决这个问题。似乎什么都没用。

  • 我读到某个地方,我们可以输入通过使用Azure内的“获取发布配置文件”获得的凭据可用于登录。但是,这似乎不是一个好方法。我们无法在客户端应用程序中输入此类机密信息。当客户端应用程序由其他人使用时,他们不应输入凭据以访问Azure Web App。如何避免输入凭据? Visual Studio(或客户端应用程序)如何建立与Azure Web应用程序的连接?

1 个答案:

答案 0 :(得分:0)

我必须问-您为什么选择在ASP.NET Web API(或任何其他现代RESTFul框架)上使用WCF? OAuth / JWT是云中现代服务用于安全性的工具。 API受可以在Azure AD中创建的客户端ID和密码保护。我认为您不会在Azure中为WCF找到很多支持。无论哪种方式,如果必须使用WCF,以下是将OAuth用于WCF的参考:OAuth and WCF SOAP service

要回答另一个问题,Visual Studio使用发布配置文件将Web应用程序部署到Azure。首次尝试从Visual Studio发布时,它将允许您导入发布配置文件。您可以从Azure App Service的仪表板获取此信息,也可以将Visual Studio指向Azure中的App Service。该对话框将为您提供保留凭据的选项。

enter image description here

对于每个发布配置文件,您将找到两种类型的文件:.pubxml文件和.pubxml.user文件。对于Web Deploy和FTP发布,.pubxml.user文件包含加密形式的密码。用户名可以在.pubxml文件中找到。

enter image description here