#c# #wcf #.net-3.5
#c# #wcf #.net-3.5
Вопрос:
Я использую CustomMembershipProvider для проверки пользователя для моей службы WCF. Пользователь получит запрос на свои учетные данные, как только он получит доступ к службе.
Примечание: я думал, что смогу получить имя пользователя и идентифицировать пользователя. Но как передать переменную из CustomMembershipProvider в мой файл службы wcf?
Пользовательский код поставщика членства
Вот код, который я проверяю!
public override bool ValidateUser(string username, string password)
{
int authenticatedId = SecurityManager.Authenticate(username, password);
if (authenticatedId != -1)
{
return true;
}
return false;
}
Вот моя базовая фабрика хостов аутентификации
Это вызовет мой CustomMembershipProvider для замены фабрики веб-служб по умолчанию.
public class BasicAuthenticationHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var serviceHost = new WebServiceHost2(serviceType, true, baseAddresses);
serviceHost.Interceptors.Add(RequestInterceptorFactory.Create("DataWebService", new CustomMembershipProvider()));
return serviceHost;
}
}
Любая помощь будет оценена.
Комментарии:
1. Ну, я использую NHibernate для доступа к базе данных!
2. Как адаптировать мою службу к конкретному пользователю? Если пользователь x входит в систему, я хочу показать данные, связанные с пользователем x. Я не знаю, как передать имя пользователя службе! Что-то вроде переменной сеанса.
Ответ №1:
После выполнения MembershipProvider.ValidateUser
SecurityServiceContext
должно быть создано действительное значение и добавлено к входящему запросу.
internal ServiceSecurityContext Create(Credentials credentials)
{
var authorizationPolicies = new List<iauthorizationpolicy>();
authorizationPolicies.Add(authorizationPolicyFactory.Create(credentials));
return new ServiceSecurityContext(authorizationPolicies.AsReadOnly());
}
Тогда у вас должен быть доступ к имени пользователя через ServiceSecurityContext.Current.PrimaryIdentity.Name
Я думаю, вы работаете над статьей Базовая аутентификация в службе WCF REST. Автор, похоже, очень отзывчив на вопросы — возможно, вы захотите задать ему несколько вопросов! Удачи!
Комментарии:
1. Спасибо вам за ответ. Вы поняли, я использую WCF REST Service kit! У меня есть какая-то ошибка в учетных данных. Я реализую этот код в OperationContext .