Проверка подлинности Silverlight Ria - проверка подлинности перед использованием DomainContext - PullRequest
0 голосов
/ 03 марта 2011

У меня есть начало стандартного приложения Silverlight / RIA / EF, которое работает сразу же, как и ожидалось.

Я хотел ограничить весь мой DomainService только аутентифицированными пользователями, поскольку приложение в конечном итоге будет жить в общедоступном Интернете, и весь доступ к данным должен проходить аутентификацию пользователя.

Проблема, с которой я столкнулся,является то, что я не могу использовать автоматически сгенерированный класс DomainContext в моем приложении Silverlight, если я не оберну все его методы Load внутри пользовательского класса, который проверяет состояние аутентификации пользователя, прежде чем пытаться получить данные - что выглядит как длинная и утомительная задача кодирования.

Конечно, должно быть простое решение, которое я пропустил?

Это было легко в ASP.NET, потому что в тот момент, когда вы потеряли (или никогда не имели) аутентификацию, вы были перенаправлены на страницу входа.(как настроено в web.config).

Я действительно удивлен, что в Silverlight нет аналогичного механизма, так как это, кажется, стандартное требование бизнес-приложения.

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Требовать аутентификацию в вашем DomainService легко. Просто добавьте атрибут [requireAuthentication] или [requireRole] либо в класс (относится ко всем операциям), либо в операцию, которую вы хотите авторизовать. Вы можете найти эти ссылки полезными.

Как: включить аутентификацию в службах RIA

RequiresAuthenticationAttribute

1 голос
/ 03 марта 2011

Я не 100% производитель, если вам нужен такой ответ, и если это хорошая практика, сделать это так, но вы могли бы внедрить инспектор сообщений, который проверяет, прошел ли пользователь аутентификацию следующим образом:

public class ClientCustomHeadersDispatchMessageInspector : IDispatchMessageInspector
{

    public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        if (!HttpContext.Current.User.Identity.IsAuthenticated) {
            throw new SecurityException("User not authenticated");
        }
        return null;
    }


    public void BeforeSendReply(ref Message reply, object correlationState)
    {
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...