我有一个托管在IIS上的远程WCF服务。然后我在Azure网站上托管了一个ASP.NET MVC网站。
该网站使用Azure Active Directory对用户进行身份验证,并且工作正常。但是,WCF服务需要正确的Windows(基于域)凭据才能返回结果。
当我在ASP.NET MVC应用程序中实例化服务时,我正在使用:
SomeService.ServiceClient client = new ServiceClient ("SOAP");
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
这由Web.config
文件支持:
<basicHttpBinding>
<binding name="SOAP" allowCookies="true" maxReceivedMessageSize="20000000"
maxBufferSize="20000000"
maxBufferPoolSize="20000000">
<readerQuotas maxDepth="32"
maxArrayLength="200000000"
maxStringContentLength="200000000"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
当我在本地运行 时,它运行正常 - 我从本地AppPool获取凭据,这些凭据可以访问WCF服务。但是,一旦我将网站部署到Azure,上面就会中断,因为很明显服务不知道我在本地拥有的凭据。
问题:
我有没有办法通过浏览器将Windows凭据传递给WCF服务而不会破坏AAD auth堆栈,因为我只需要那些用于WCF连接而没有别的东西?我完全可以显示系统提示凭证。
答案 0 :(得分:0)
你应该可以像这样设置Windows凭证......
SomeService.ServiceClient client = new ServiceClient ("SOAP");
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("Username", "Password", "Domain");
希望这有帮助!