2012-01-09 2 views
2

J'utilise WCF avec mon application ASP.NET MVC, mon service de données obtient des données de mon fichier (EF 4.1) .mdf. Mais il y a quelques Feild que je veux montrer avec l'authentification, par exemple:Comment autoriser uniquement l'accès à partir du service de données WCF ServiceOperation

public static void InitializeService(DataServiceConfiguration config) 
{ 
    config.SetEntitySetAccessRule("Exercies", EntitySetRights.All); 
    config.SetServiceOperationAccessRule("GetAllExercies", ServiceOperationRights.All); 
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; 
} 
[WebGet] 
public IQueryable<Exercise> GetAllExercies(string name, string pass) 
{ 
    if (Membership.ValidateUser(name, pass)) 
     return CurrentDataSource.Exercies; 
    else 
     return CurrentDataSource.Exercies.Where(e => e.Public == true); 
} 

Maintenant, quand httx d'accès utilisateur: //localhost/MyService.svc/Exercies, ils peuvent obtenir tout ce que bien qu'ils ne reçoivent pas le nom d'utilisateur et passe.
Ma solution temporaire est re nom GetAllExercies à seulement Exercies mais je ne sais pas est-il possible de mieux ...

Répondre

2

Oui, il y a une meilleure solution: les intercepteurs de requête. En fait, l'utilisation du même nom pour l'ensemble d'entités et l'opération de service a tendance à entraîner des problèmes dans certains scénarios (les métadonnées $ sont "confuses" pour les clients). Il n'est également pas sécurisé à 100% (n'empêche pas d'accéder à l'entité via une propriété de navigation si vous l'avez).

Voir ceci http://msdn.microsoft.com/en-us/library/dd744842.aspx. L'idée est que vous fassiez du filtre d'authentification une partie de la requête d'ensemble d'entités, et le service DS de WCF s'assure qu'il sera utilisé partout où cet ensemble d'entités est accédé.

+0

Étant donné que les intercepteurs ne peuvent pas accepter les paramètres ... Je l'utilise simplement pour désactiver l'accès au jeu d'entités. Y a-t-il de meilleures solutions pour moi? – nvcnvn

+0

Peu importe ... J'utilise maintenant HttpContext pour accéder à la chaîne de requête. – nvcnvn

Questions connexes