2011-01-27 1 views
1

Je crée un grand site ASP.NET 4 qui a un backend de service WCF. Je voudrais que le site utilise le service pour la connexion et l'autorisation.Comment lier les autorisations ASP.NET au service WCF

Fondamentalement, lorsque l'utilisateur accède à la page de connexion, au lieu d'utiliser un fournisseur d'appartenance, je souhaite que le service WCF soit utilisé comme mécanisme d'authentification. Le service WCF utilise déjà l'authentification et l'autorisation (avec emprunt d'identité), de sorte que les clients du service reçoivent des erreurs s'ils essaient d'exécuter des méthodes de service auxquelles ils n'ont pas d'autorisation.

La question est de savoir comment lier cela avec le site ASP.NET?

Voici quelques exemples de code que j'utilise:

Web Service Interface:

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    bool Foo(); 

    [OperationContract] 
    void Bar(); 
} 

Service Web:

public class BackEndService : IService 
{ 
    [PrincipalPermission(SecurityAction.Demand, Role="FooRole")] 
    public bool Foo() 
    { 
     return false; 
    } 

    [PrincipalPermission(SecurityAction.Demand, Role="Bar")] 
    public void Bar() 
    { 
     //... 
    } 
} 

Sur le client:

public class LoginPage : Page 
{ 
    public void LoginButton_Clicked(object sender, EventArgs e) 
    { 
     string username = TxtUsername.Value; 
     string password = TxtPassword.Value; 

     BackEndService client = new BackEndService(); 
     client.CleintCredentials.Username = username; 
     client.ClientCredentials.Password = password; 

     client.Foo(); //if the credentials supplied do not have permissions there will be error 
     client.Bar(); 
    } 
} 

Ce que je vise à atteindre Il faut que certaines fonctionnalités de l'élément de l'interface utilisateur soient marquées avec l'attribut PrincipalPermission afin que l'utilisateur n'ait pas à se rendre au service pour découvrir qu'il n'a pas les permissions.

De plus, j'aimerais que certains des éléments d'interface utilisateur soient chargés/déchargés en fonction des permissions de l'utilisateur.

Est-il possible ou dois-je faire une logique dans mon service pour renvoyer les modules UI que l'utilisateur peut voir? Est-il possible que les autorisations soient gérées via le service comme s'il s'agissait d'un fournisseur d'appartenance, comme c'est le cas avec l'utilisation de PrincipalPermissionAttribute sur le code de l'élément de l'interface utilisateur?

Merci,

<bleepzter/> 

Répondre

1

Si vous souhaitez utiliser ASP.NET Membership, vous devez écrire votre propre fournisseur d'appartenances pour authentifier contre votre service WCF. Vous devrez peut-être ajouter une opération à votre service WCF pour renvoyer une liste des rôles auxquels l'utilisateur appartient. Vous pouvez ensuite utiliser la classe Membership pour déterminer si un utilisateur est un rôle particulier et masquer/afficher les éléments d'interface utilisateur si nécessaire.

Voir http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx pour plus d'informations sur la création d'un fournisseur d'appartenances.

+0

J'avais peur de ça. Je pense que je vais rouler ma propre logique pour cacher et montrer l'interface utilisateur sans adhésion. – bleepzter

Questions connexes