Как разрешить доступ только из службы данных WCF ServiceOperation - PullRequest
2 голосов
/ 09 января 2012

Я использую WCF с моим приложением ASP.NET MVC, моя служба данных получает данные из моего (EF 4.1) .mdf файла.Но есть кое-что, что я хочу показать с аутентификацией, например:

public static void InitializeService(DataServiceConfiguration config)
{
    config.SetEntitySetAccessRule("Exercies", EntitySetRights.All);
    config.SetServiceOperationAccessRule("GetAllExercies", ServiceOperationRights.All);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
[WebGet]
public IQueryable<Exercise> GetAllExercies(string name, string pass)
{
    if (Membership.ValidateUser(name, pass))
        return CurrentDataSource.Exercies;
    else
        return CurrentDataSource.Exercies.Where(e => e.Public == true);
}

Теперь, когда пользователь обращается к httx: //localhost/MyService.svc/Exercies, они могут получить все, хотя им не даютимя пользователя и пароль.
Мое временное решение - переименование GetAllExercies на Exercies , но я не уверен, что есть лучший способ ...

1 Ответ

2 голосов
/ 09 января 2012

Да, есть лучшее решение: перехватчики запросов. Фактически, использование одного и того же имени для набора сущностей и работы службы в некоторых случаях приводит к проблемам (метаданные $ «сбивают с толку» для клиентов). Это также не на 100% безопасно (не препятствует доступу к сущности через какое-либо свойство навигации, если оно у вас есть).

См. Это http://msdn.microsoft.com/en-us/library/dd744842.aspx. Идея состоит в том, чтобы сделать фильтр проверки подлинности частью запроса набора сущностей, а служба WCF DS гарантирует, что он будет использоваться везде, где осуществляется доступ к набору сущностей.

...