Откуда эти имена пользователей и пароли? Если на вашем веб-сайте уже реализована проверка подлинности с помощью форм, вы можете самостоятельно обойти настройки учетных данных и использовать файл cookie проверки подлинности с помощью форм. Если ваши пользователи вошли в систему, тогда cookie отправится вместе с вызовом веб-службы. Чтобы прочитать его с другой стороны, нужно внести пару изменений.
Сначала необходимо включить режим совместимости ASP.NET для WCF в разделе system.ServiceModel:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
Как только это будет сделано, для каждого метода службы, который вы хотите понять, файл cookie ASP.NET, добавьте атрибут [AspNetCompatibilityRequirements] в свой класс службы
[ServiceContract]
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExampleService
{
}
Теперь внутри каждого метода вы можете получить доступ к объекту HttpContext.Current.User.Identity, чтобы узнать личность пользователя.
Если вы хотите, чтобы аутентифицированные пользователи вызывали только определенные методы, то вы можете использовать PrincipalPermission, таким образом
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Authenticated=true)]
public string Echo()
В качестве бонуса, если вы используете поставщик ролей ASP.NET, они также будут заполнены, и вы сможете использовать PrincipalPermission для методов, чтобы ограничить их членами определенной роли:
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Role="Administators")]
public string NukeTheSiteFromOrbit()
И это очевидно работает и в Silverlight2.