2014-12-02 13 views
13

असल में, मैं अपनी पहली डब्लूसीएफ वेब सेवा बना रहा हूं और मैं कस्टम प्रमाणीकरण और प्रमाणीकरण को लागू करने के लिए देख रहा हूं। प्रमाणीकरण अच्छी तरह से काम कर रहा प्रतीत होता है, लेकिन मैं कस्टम प्राधिकरण का उपयोग करके भूमिकाओं और अनुमतियों को स्टोर करने में सक्षम होना चाहता हूं।डब्ल्यूसीएफ कस्टम प्राधिकरण

मेरा प्रमाणीकरण UserNamePasswordValidator ओवरराइड करके और Validate विधि का उपयोग करके किया जाता है।

Validate(string UserName, string password) 

अब मैं IAuthorizationPolicy इंटरफ़ेस

public class AuthorizationPolicy : IAuthorizationPolicy 
{ 
    private string _id; 

    public string Id 
    { 
     get { return this._id; } 
    } 

    public ClaimSet Issuer 
    { 
     get { return ClaimSet.System; } 
    } 

    public AuthorizationPolicy() 
    { 
     _id = Guid.NewGuid().ToString(); 
    } 

    public bool Evaluate(EvaluationContext context, ref object state) 
    { 
     IIdentity client = GetClientIdentity(context); 
     context.Properties["Principal"] = new CustomPrincipal(client); 

     return true; 
    } 

    private IIdentity GetClientIdentity(EvaluationContext evaluationContext) 
    { 
     object obj; 
     if (!evaluationContext.Properties.TryGetValue("Identities", out obj)) 
      throw new Exception("No Identity found"); 

     IList<IIdentity> identities = obj as IList<IIdentity>; 
     if (identities == null || identities.Count <= 0) 
      throw new Exception("No Identity found"); 

     return identities[0]; 
    } 
} 

का उपयोग करके प्राधिकरण को लागू करने की कोशिश की है और मैं भी IPrincipal इंटरफ़ेस का उपयोग कर CustomPrincipal क्रियान्वित किया है। के रूप में आवश्यक

public class CustomPrincipal : IPrincipal 
{ 
    IIdentity _identity; 
    string[] _roles; 

    public CustomPrincipal(IIdentity identity) 
    { 
     _identity = identity; 
    } 

    public static CustomPrincipal Current 
    { 
     get 
     { 
      return Thread.CurrentPrincipal as CustomPrincipal; 
     } 
    } 

    public IIdentity Identity 
    { 
     get { return _identity; } 
    } 

    public string[] Roles 
    { 
     get 
     { 
      if (_roles == null) 
      { 
       EnsureRoles(); 
      } 

      return _roles; 
     } 
    } 

    public bool IsInRole(string role) 
    { 
     EnsureRoles(); 

     return _roles.Contains(role); 
    } 

    protected virtual void EnsureRoles() 
    { 
     UserManager userManager = new UserManager(); 
     int userPermissions = userManager.UserPermissions(_identity.Name); 

     if (userPermissions == 1) 
      _roles = new string[1] { "ADMIN" }; 
     else 
      _roles = new string[1] { "USER" }; 
    } 
} 

मेरे app.config अद्यतन किया गया है, और AuthorizationPolicy में Evaluate विधि के रूप में उम्मीद कहा जाता है।

हालांकि, यह वह जगह है जहां मैं अटक गया हूं। मैं यहां से भूमिकाओं और अनुमतियों को लागू करने के बारे में कैसे जा सकता हूं?

उत्तर

5

चाहते मेरा सुझाव है कि आप एक Message Inspector के लिए चुनते हैं।

  1. क्लाइंट संदेश निरीक्षक कि प्रत्येक अनुरोध के लिए आवश्यक हेडर सेट हो जाएगा होगा:

    तर्क इस प्रकार होगा।

  2. सर्वर साइड मैसेज इंस्पेक्टर अनुरोध को रोक देगा और फिर हेडर पढ़ेगा और प्रमाणीकरण और प्रमाणीकरण करेगा।
  3. आपके पास उपयोगकर्ता और रोल सेवा जैसी कुछ सेवाएं हो सकती हैं जिन्हें सर्वर में क्रेडेंशियल्स को सत्यापित करने और उस अनुरोध के लिए पहचान सेट करने के लिए सर्वर में बुलाया जा सकता है।
  4. ये सेवाएं डीएएल के माध्यम से स्टोर तक पहुंच रही हैं और इनप्रोक मोड में होंगी।
3

आप Authentication and Authorization with ASP.NET Identity 2.0 for WCF Services

मूल रूप से करने के लिए उल्लेख कर सकते हैं यदि आप इस लेख के अनुसार विचार करने के लिए 3 स्तरों होगा:

  1. System.IdentityModel और System.Security.Principal

  2. Asp.net पहचान 2.0 यदि आप एमवीसी अनुप्रयोगों के साथ साझा बॉक्स संदर्भ से बाहर का उपयोग करना चाहते हैं; या आप अपने कस्टम डेटाबेस का उपयोग करें।

  3. नीतियां यदि आप सुरक्षा नीति के ठीक नियंत्रण बेहतरीन

संबंधित मुद्दे