2009-07-28 7 views
17

Ich arbeite mit den Silverlight RIA Services und möchte eine benutzerdefinierte Authentifizierung erstellen. Dies scheint die einzige Sache zu sein, die praktisch keine Dokumentation hat (ich habe die gesamte RIAServicesOverview.docx gelesen).RIA Services: Wie kann ich benutzerdefinierte Authentifizierung erstellen?

Kennen Sie eine Möglichkeit, einen Kundenauthentifizierungsdienst zu erstellen? Ich möchte das standardmäßige ASP.NET-Mitgliedschaftsmodell nicht verwenden. Ich weiß nicht, welche Schnittstelle oder abstrakte Klasse ich implementieren muss - obwohl ich System.Web.Ria.ApplicationServices.IAuthentication gefunden habe.

Muss ich IAuthentication implementieren? Wenn ja, könntest du mir einen Rat geben, wie ich vorgehe? Dies sind die folgenden Methoden:

public User GetUser(); 

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

    public User Logout(); 

    public void UpdateUser(User user); 

Ich weiß nicht, wie ich eine dieser Implementierung würde (außer Login) - wie könnte der Dienst möglicherweise wissen, welche Benutzer derzeit angemeldet, um Logout() zu Arbeit?

Ich habe das Web auf der Suche nach, wie dies für Stunden zu tun, und ich kann nichts finden, das beschreibt, wie ein einfacher DomainService erstellen, der zur Authentifizierung eines Benutzers in einem "RIA-verknüpft verwendet werden kann "Silverlight-Projekt.

Wenn jemand etwas Licht in diese Sache bringen könnte, wäre ich aufrichtig dankbar.

Danke,
Charles


[EDIT]
fand ich die RIA Services page on the MSDN Code Gallery. Es gibt einen Abschnitt namens Authentication Samples, der zu einigen tollen Codebeispielen führt. Informieren Sie sich darüber, wenn Sie mehr darüber erfahren möchten, wie die Authentifizierung in RIA Services funktioniert.

Antwort

20

Wenn Sie eine "Silverlight Business Application" erstellen, sehen Sie, wie die Vorlage die Authentifizierung implementiert. (Oder nur here and download the template sample project gehen.)

zu vereinfachen, hier ist der Prozess, den ich verwendet:

Zuerst habe ich einen Domain-Service (FooService) erstellen, die von LinqToEntitiesDomainService leitet, wo FooContext ist mein Entitätsmodell. Darin füge ich alle CRUD-Operationen hinzu, um auf meine benutzerdefinierte DB-Tabelle zuzugreifen und Benutzerprofile zurückzugeben.

nächste eine konkrete Benutzerklasse auf dem server erstellen, indem Sie von Userbase ableiten:

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

public class User : UserBase 
{} 

Schließlich leiten Sie eine Klasse von AuthenticationBase und Umsetzung der folgenden vier Methoden:

[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

Danke, das ist, was ich suchte. Prost – Charles

+0

* auf der Suche nach * ... Meine Butter Finger und ich hätte nichts dagegen, eine Bearbeitungsoption für Kommentare ... – Charles

+0

Bitte können Sie diese Antwort ein wenig mehr im Detail erklären?Ich bemühe mich wirklich, nur normale Authentifizierung zu implementieren, und ich kann keine guten Informationsquellen finden, die nicht völlig zweideutig sind und Wissen bereits annehmen. Ich würde wirklich etwas Hilfe schätzen. – Goober

0

Wie über die Implementierung die IAuthorization Schnittstelle?

Verwandte Themen