Надеюсь, вы, ребята, сможете прояснить кое-что для меня.У меня есть веб-приложение, использующее Sql Membership Provider, и оно общается со вторым веб-приложением через службу WCF.Оба приложения используют одно и то же хранилище данных Sql Membership Provider ... но мне нужен каждый вызов службы WCF для проверки подлинности пользователя.
Теперь я посмотрел МНОГО примеров, но я чувствую себя как примерыЯ видел, как либо пропущен определенный код, потому что он «должен» быть очевидным для меня, либо я неправильно понимаю, как WCF обрабатывает запрос (см. ожидаемый код ниже).
Я благодарен за любую помощь ...
ЗДЕСЬ, ЧТО Я УЖЕ ЗНАЮ, КАК ДЕЛАТЬ
- Я знаю, как настроить членство в Sql на обоих концах.
- Я знаю, какнастроить wsHttpBinding
- Я знаю, как настроить сертификат служб, используемый в транспортной безопасности
ЗДЕСЬ, ЧТО Я ВКЛЮЧЕН В
Как я могу передать пароль участника (... вы не можете) Передать ли файл cookie аутентификации?Если да, то как? Могу ли я создать «известное» имя пользователя и пароль, не относящиеся к пользователю (самим себе)?
В ВЕБ-КЛИЕНТЕ, К КОТОРОМУ Я БУДУ ОЖИДАТЬСМОТРИТЕ ЧЕМ-то, КАК ЭТОТ
protected void btnLogin_Click(object sender, EventArgs e)
{
// Logging into the web-application is known and easy.
if (Membership.ValidateUser("MyUserName", "MyPassword"))
{
FormsAuthentication.SetAuthCookie("MyUserName", true);
FormsAuthentication.RedirectFromLoginPage("MyUserName", false);
}
}
protected ServiceReference1.Contractor getContractor(Int32 key)
{
// I expect something "like" this on the client call.
MembershipUser user = Membership.GetUser("MyUserName");
ServiceReference1.FishDataClient wcfService = new ServiceReference1.FishDataClient();
// You can't retreive the users password directly,
// nor can you get the hash from the SqlMembershipProvider.
wcfService.ChannelFactory.Credentials.UserName.UserName = user.UserName;
// So doing something like this would not be possible.
wcfService.ChannelFactory.Credentials.UserName.Password = "??????";
// So how is the web service going to authenticate the user from it's
// references to the same SqlMembershipProvider (database).
ServiceReference1.Contractor contractor = wcfService.GetContractor(key);
wcfService.Close();
wcfService = null;
return contractor;
}
В СЛУЖБЕ WCF Я БУДУ ОЖИДАТЬ, ЧТО-ТО СМОТРЕТЬ КОД, КАК ЭТО
[PrincipalPermission(SecurityAction.Demand, Role = "User")]
public Contractor GetContractor(Int32 key)
{
ServiceSecurityContext context = ServiceSecurityContext.Current;
Contractor contractor = new Contractor();
// What goes here? I would expect something like this...
if (Membership.ValidateUser("???????", "???????"))
contractor.Get(key);
return contractor;
}