2009-07-28 3 views
17

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

Знаете ли вы, как мне создать службу аутентификации клиентов? Я не хочу использовать модель членства 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); 

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

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

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

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


[EDIT]
Я нашел RIA Services page on the MSDN Code Gallery. Существует раздел под названием Authentication Samples, который ссылается на некоторые замечательные примеры кода. Проверьте это, если вы хотите узнать больше об аутентификации в службах RIA.

ответ

20

Если вы создаете «Бизнес-приложение Silverlight», вы увидите, как шаблон реализует аутентификацию. (Или просто пойти here and download the template sample project.)

Чтобы упростить, вот процесс, который я использовал:

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

Далее создайте конкретный класс пользователя на ServerSide, выводя из 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's 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); 
    } 
} 
+0

Спасибо, это то, что я искал. Cheers – Charles

+0

* ищет * ... Мои пальцы маслом, и я бы не возражал против варианта редактирования комментариев ... – Charles

+0

Не могли бы вы объяснить этот ответ чуть подробнее?Я действительно пытаюсь реализовать только обычную проверку подлинности, и я не могу найти никаких хороших источников информации, которые не являются полностью двусмысленными и уже предполагают знания. Я бы очень признателен за помощь. – Goober

0

Как насчет реализации интерфейс IAuthorization?

Смежные вопросы