2016-04-19 8 views
2

Ich versuche, externe Anforderungen an den WCF-Webdienst durch die Übergabe von Benutzeranmeldeinformationen im SOAP-Header zu authentifizieren.Wie authentifizieren externe Anforderungen an WCF-Webdienst?

using (UsrService client = new UsrService()) 
{ 
    client.Credentials = new System.Net.NetworkCredential("User 1", "Password 1"); 
    client.SomeRemoteMethod(); 
} 

Ich bekomme die Ausnahme:

Unbehandelte Ausnahme: System.Net.WebException: Fehler bei der Anforderung mit die Fehlermeldung: Objekt

bewegt
Unhandled exception: System.Net.WebException: The request failed with the error message: 
-- 
<html><head><title>Object moved</title></head><body> 
<h2>Object moved to <a href="/NuiLogin.aspx?ReturnUrl=%2f0%2fServiceModel%2fSimp 
leCustomService.svc%2fsoap">here</a>.</h2> 
</body></html> 

--. 
    in System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClien 
tMessage message, WebResponse response, Stream responseStream, Boolean asyncCall 
) 
    in System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodNa 
me, Object[] parameters) 
    in UsrService.SayHello() in c:\VS2015\Projects\WCFSharedDLL\WCFSharedDLL\TestPr 
oxyClass.cs:line 44 
    in ConsoleApplicationForTesting.Program.Main(String[] args) in c:\VS2015\Projec 
ts\ConsoleApplicationForTesting\ConsoleApplicationForTesting\Program.cs:line 1 
6 

Wie kann ich externe Anforderungen an den WCF-Webdienst authentifizieren?

Ich wäre sehr dankbar für die Informationen. Dank an alle.

Antwort

0

In der folgenden Weise hergestellt.

von Transportprotokoll gesendet I Benutzerdaten wie folgt:

public const string authServiceUri = "http://localhost:8080/ServiceModel/AuthService.svc/Login"; 
public static CookieContainer AuthCookie = new CookieContainer(); 

public static bool TryLogin(string userName, string userPassword) 
{ 
    var authRequest = HttpWebRequest.Create(authServiceUri) as HttpWebRequest; 
    authRequest.Method = "POST"; 
    authRequest.ContentType = "application/json"; 
    authRequest.CookieContainer = AuthCookie; 

    using (var requesrStream = authRequest.GetRequestStream()) 
    { 
     using (var writer = new StreamWriter(requesrStream)) 
     { 
      writer.Write(@"{ 
       ""UserName"":""" + userName + @""", 
       ""UserPassword"":""" + userPassword + @""" 
      }"); 
     } 
    } 

    using (var response = (HttpWebResponse)authRequest.GetResponse()) 
    { 
     if (AuthCookie.Count > 0) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Dann habe ich Cookie wie folgt:

client.CookieContainer = AuthCookie; 

Danach wurde es möglich, auf das Web zuzugreifen - Service:

static void Main(string[] args) 
{ 
    using (UsrService client = new UsrService()) 
    { 
     if(TryLogin("User 1", "User 1")) 
     { 
      client.CookieContainer = AuthCookie; 
      Console.WriteLine(client.SayHello()); 
     } 
    } 
} 

enter image description here

Obwohl es unklar ist, warum ich die Anfragen nicht über die Weitergabe von Anmeldeinformationen im SOAP-Header authentifizieren kann ...