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服务时遇到了问题。 此问题在另一个主题中指定。