WCF ile nispeten basit bir kendi kendine barındırılan RESTful hizmeti oluşturmaya çalışıyorum, ancak özel kimlik doğrulaması eklemek istedim. Bu amaçla UserNamePasswordValidator
'u geçersiz kılmaya çalıştım. Ne yazık ki, bu bir kullanıcı adı/şifre kombinasyonunu doğrulamak için çağrılsa da, kullanıcı adı/şifre geçmezse, sunucu beklediğim gibi 401 Yetkisiz yerine 403 Yasaklandı. Bu, büyük bir soruna neden olacaktır, çünkü bir kullanıcı ilk kez kimlik doğrulaması yapmazsa, tarayıcıyı yeniden başlatmadıkça kimlik bilgilerini tekrar girmeleri istenmez. Peki, ne yapıyorum yanlış? Neden kendi kendime barındırılan WCF hizmetim geri geliyor 403 Yasaksız, 401 Yetkisiz değil mi?
Bu
Bugüne kadar ne var:Zaten bu other, similar question not aldım
class Program
{
static void Main(string[] args)
{
WebServiceHost host = null;
try
{
host = new WebServiceHost(typeof (MyService));
const string uri = "http://127.0.0.1/MyService";
var wb = new WebHttpBinding
{
Security =
{
Mode = WebHttpSecurityMode.TransportCredentialOnly,
Transport = {ClientCredentialType = HttpClientCredentialType.Basic}
}
};
var ep = host.AddServiceEndpoint(typeof (IMyService), wb, uri);
host.Credentials.UserNameAuthentication.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
host.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new PasswordValidator();
host.Open();
Console.WriteLine("Press any key to terminate");
Console.ReadKey();
}
finally
{
if (host != null) host.Close();
}
}
}
public class PasswordValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
if (null == userName || null == password)
throw new ArgumentNullException();
if (userName == "Test" && password == "Password") return;
throw new WebFaultException(HttpStatusCode.Unauthorized);
}
}
(gerçek ServiceContract
bir dize döndürür tek bir yöntem içerir), ancak hiçbiri Orada yayınlanan cevaplar aslında çalışır. Sorunun daha tam olarak tanımlanmış bir versiyonunun daha iyi yanıtlar almasını umuyorum.
Bu yardımcı olabilir http://stackoverflow.com/questions/2198560/self-hosted-wcf-rest-service-and-basic-authentication – Alex
Tam olarak yardımcı olmuyor, ancak ahlaki destek sağlıyor ve açıklama :) – adhocgeek
Aslında, onu geri alıyorum, orada bir çözüm olduğunu, bu soruya gönderilen ve kabul edilenle aynı olduğunu görecek kadar okumamıştım. – adhocgeek