C#在两个Web应用程序之间validationWeb服务的问题

我正在开发一个在公司中心运行的Web应用程序。 此Web应用程序需要调用服务,该服务是第二个Web应用程序的一部分。

在中央Web应用程序中,我有这段代码;

var clientUri = "http://website.localhost/Services/Info.svc/account"; var uri = new Uri(clientUri); var networkCredentials = new NetworkCredential(_configuration.ServiceUserName, _configuration.ServicePassword); var httpClient = new HttpClient(); httpClient.DefaultHeaders.Authorization = Credential.CreateBasic(_configuration.ServiceUserName, _configuration.ServicePassword); httpClient.TransportSettings.PreAuthenticate = true; HttpResponseMessage respone = httpClient.Get(uri); HttpContent content = respone.Content; 

在另一个应用程序的Web服务中,即(Info.svc),我在服务的构造函数中有以下代码。

 var validator = new UserNamePasswordValidator(); var cred = System.Net.CredentialCache.DefaultCredentials; //this one is empty, maybe a solution? validator.Validate("Username", "Password"); if (!HttpContext.Current.User.Identity.IsAuthenticated) { //This throws a 401 unauthorize, which is shown as a 500 error in the central application throw new WebProtocolException(HttpStatusCode.Unauthorized, "You must be authorized to perform this action.", null); } else { _userIsAbleToUseService = true; } 

我想使用从其他Web服务发送的网络凭据,而不是validationfunction中的用户名和密码,这可以实现吗? 如何? 欢迎任何其他建议! 我现在可以在validationfunction中对密码进行编码,但这不是我想要的。

–UPDATE–这是中央应用程序的web.config中的配置

               

这部分是针对第二个web应用程序中的web.config

                    

已经使用成员资格提供程序登录到中央应用程序我正试图使用​​简单的超链接从那里调用web服务(仅适用于现在)。 中央管理员调用的Web服务收集一些数据并将其发送到第二个应用程序的Web服务的URL。 这两个应用程序都是webapplications(包含webservices),这就是为什么身份validation模式设置为Forms。

花了将近2天,但现在我按照自己的意愿工作了。 我找到了WcfRestContrib,它允许我通过稍微修改我的webconfig并使用这个类中的一些属性来实现对服务的身份validation。 我使用服务和控制台应用程序构建了一个快速测试应用程序,并且身份validation工作正常。

我将以下部分添加到我的web.config中;

                     

之后我修改了我的服务界面,看起来像这样;

 [ServiceContract] public interface ICmsInfo { [OperationContract] [OperationAuthentication] [WebInvoke(UriTemplate = "account", Method = "GET")] AccountDTO GetAccountInfo(); 

我采取的最后一步是为服务本身添加2个attritubes;

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceConfiguration("Rest", true)] public class Cmsinfo : ICmsInfo { //foo } 

WcfRestContrib通过添加这种身份validation技术帮助了我很多,而且效果很好。 我只需要确保我也使用了授权标头。

在此之后,我在使用Forms身份validation的webapplication中validationweb服务时遇到了问题。 此问题在另一个主题中指定。