zacząłem Rozwijanie z Sitefinity 8.1 i muszę dostęp do WCF Web Services Sitefinity (np ~ \ Sitefinity \ Services \ commerce \ Katalog \ ProductService.svc)Błąd 401 Dzwoniąc z Web Services Sitefinity WCF
Próbowałem uzyskać do nich dostęp, jak każda inna usługa sieci Web, ale dostaję błąd 401. Po wyszukaniu w sieci i forum Sitefinity znalazłem kilka rzeczy.
muszę Uwierzytelnianie Przed używam usług [1 & 2]
Authentication roszczenie oparte jest domyślnym Authentication
Adres URL używany do uwierzytelniania jest/Sitefinity/Usługi /Security/Users.svc/authenticate [1 & 2]
Znalazłem również fragment dostarczony przez Ivana Dymitrowa, w którym koduje kod uwierzytelniający [3 ]
Client Api to bezwartościowy do uwierzytelniania i pozostawić wniosek do usług internetowych
Jego potrzebowała STS uwierzytelniać i jest zintegrowana w moim Sitefinity Montaż [2] „można się zastanawiać, gdzie to STS to. Domyślnie logika jest zintegrowana z aplikacją Sitefinity i można ją znaleźć w ~/Sitefinity/SWT. " [2]
Po przeczytaniu tej informacji dostosowałem kod podany przez Ivana Dimitrowa [3] i zakodowałem wywołanie do katalogu \ Sitefinity \ Services \ Ecommerce \ Catalog \ ProductService.svc. I mam błąd 401.
„Zdalny serwer zwrócił błąd: (401) Nieuprawnione” jest wynikiem błędnych danych uwierzytelniających, jednak testowałem tych samych danych z API Client, Przez klasy securityManager i uzyskać „UserLoggingReason.Succes” , więc dane uwierzytelniające są poprawne.
Dziwnym faktem jest to, że nie mam żadnego folderu ~/Sitefinity/SWT. Czy to może być przyczyną moich problemów?
Używam ASP.NET MVC, a ja robię żądanie z kontrolera Web Api. i to jest przystosowane Kod:
public static bool AuthenticateRequest(string membershipProvider, string userName, string password, bool rememberMe, ApiController controller)
{
var jsonData = String.Format(credentialsFormat, membershipProvider, userName, password, rememberMe.ToString().ToLower());
var credentials = Encoding.UTF8.GetBytes(jsonData);
string result = InvokeWebMethod(usersServiceUrl, authenticateMethod, "POST", credentials, controller);
switch (result)
{
case "0":
return true;
default:
return false;
}
}
public static string InvokeWebMethod(string serviceUrl, string methodName, string httpMethod, byte[] data, ApiController controller)
{
var request = (HttpWebRequest)WebRequest.Create(String.Concat(sitefinityHost, serviceUrl, methodName));
request.Method = httpMethod;
request.ContentType = "application/json";
request.CookieContainer = new CookieContainer();
if (cookies != null)
{
foreach (Cookie cookie in cookies)
if (!cookie.Expired)
request.CookieContainer.Add(cookie);
}
if (data != null)
{
request.ContentLength = data.Length;
using (var writer = request.GetRequestStream())
{
writer.Write(data, 0, data.Length);
}
}
using (var response = (HttpWebResponse)request.GetResponse()) //The error is here
{
cookies = response.Cookies;
using (var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
var cookie = new HttpCookie("customCookie", "cookieVal")
{
Expires = DateTime.Now.AddDays(1),
Domain = controller.Request.RequestUri.Host,
Path = "/"
};
HttpContext.Current.Response.SetCookie(cookie);
return reader.ReadToEnd();
}
}
}
(ja również Zmieniono sitefinityHost na moim komputerze)
są wszystkie moje 6 lokali poprawnych czy coś się zmieniło?
Co może być przyczyną 401?
Dziękuję bardzo,
Referencje (najbardziej relevants):
[1] Jak uwierzytelniać (http://www.sitefinity.com/blogs/svetlayankova/posts/svetla-yankovas-blog/2011/11/01/getting_started_with_restful_services_in_sitefinity)
[2] Jak uwierzytelnić (http://www.sitefinity.com/blogs/svetla-yankovas-blog/2013/01/02/working-with-restful-services-part-2-claims-authentication-and-designing-service-calls)
[3] Kod uwierzytelniania (http://www.sitefinity.com/developer-network/forums/general-discussions-/windows-authentication#1655610)