Подтвердить что ты не робот

Услуги RIA: как создать пользовательскую проверку подлинности?

Я работаю с Silverlight RIA Services, и я хочу создать собственную аутентификацию. Кажется, это единственное, у которого практически нет документации (я прочитал весь RIAServicesOverview.docx).

Знаете ли вы, как мне создать сервис аутентификации клиентов? Я не хочу использовать модель членства ASP.NET по умолчанию. Я не знаю, какой интерфейс или абстрактный класс мне нужно реализовать - хотя я нашел System.Web.Ria.ApplicationServices.IAuthentication.

Нужно ли мне выполнять IAuthentication? Если да, не могли бы вы дать мне несколько советов о том, как это сделать? Это следующие методы:

    public User GetUser();

    public User Login(string userName, string password, bool isPersistent, string customData);

    public User Logout();

    public void UpdateUser(User user);

Я не знаю, каким образом я мог бы реализовать какие-либо из них (кроме Login) - как служба могла знать, что пользователь в настоящий момент зарегистрировал, чтобы Logout() работал?

Я просматривал веб-страницы в поисках того, как это делать в течение нескольких часов, и я не могу найти ничего, что описывает, как создать простой DomainService, который может использоваться для аутентификации пользователя в "RIA-linked", Проект Silverlight.

Если бы кто-то мог пролить свет на это, я был бы искренне благодарен.

Спасибо,
Чарльз


[EDIT]
Я нашел страницу RIA Services в галерее кодов MSDN. Там раздел под названием Примеры проверки подлинности, который ссылается на некоторые отличные примеры кода. Проверьте, хотите ли вы узнать больше об аутентификации в службах RIA.

4b9b3361

Ответ 1

Если вы создаете "Бизнес-приложение Silverlight", вы увидите, как шаблон реализует аутентификацию. (Или просто перейдите здесь и загрузите образец образца шаблона.)

Для упрощения здесь используется следующий процесс:

Сначала я создаю службу домена (FooService), которая происходит из LinqToEntitiesDomainService, где FooContext является моей моделью сущности. В нем я добавляю все операции CRUD для доступа к моей пользовательской таблице DB и возвращению профилей пользователей.

Затем создайте конкретный класс User на сервере, выведя из UserBase:

using System.Web.Ria;
using System.Web.Ria.ApplicationServices;

public class User : UserBase
{}

Наконец, выведите класс из AuthenticationBase и выполните следующие четыре метода:

[EnableClientAccess]
public class AuthenticationService : AuthenticationBase<User>
{
    private FooService _service = new FooService();

    protected override bool ValidateUser(string username, string password)
    {
        // Code here that tests only if the password is valid for the given
        // username using your custom DB calls via the domain service you
        // implemented above
    }

    protected override User GetAuthenticatedUser(IPrincipal pricipal)
    {
        // principal.Identity.Name will be the username for the user
        // you're trying to authenticate. Here one way to implement
        // this:
        User user = null;
        if (this._service.DoesUserExist(principal.Identity.Name)) // DoesUserExist() is a call
                                                                  // added in my domain service
        {
            // UserProfile is an entity in my DB
            UserProfile profile = this._service.GetUserProfile(principal.Identity.Name);
            user.Name = profile.UserName;
            user.AuthenticationType = principal.Identity.AuthenticationType;
        }
        return user;
    }

    public override void Initialize(DomainServiceContext context)
    {
        this._service.Initialize(context);
        base.Initialize(context);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
            this._service.Dispose();
        base.Dispose(disposing);
    }
}

Ответ 3

Как реализовать интерфейс IAuthorization?