2016-09-07 3 views
6

मैं WPP और Winforms ऐप्स में समूह सदस्यता की जांच करने के लिए WindowsPrincipal's IsInRole विधि का उपयोग कर रहा हूं। मैं एक पहचान टोकन उत्पन्न कर रहा हूं जो कि किसी भी एडी उपयोगकर्ता के लिए हो सकता है (जरूरी नहीं कि वह उपयोगकर्ता जो वास्तव में कंप्यूटर में लॉग इन हो - जो मैं कर रहा हूं उसके आधार पर मैं जरूरी प्रमाणीकरण नहीं करता हूं, मैं केवल बुनियादी सूचना स्तर टोकन का उपयोग करता हूं (मुझे लगता है कि इसके लिए उचित नाम "पहचान टोकन" है)IsInRole नई सुरक्षा टोकन प्राप्त कर रहा है

पहली बार यह कोड किसी विशेष कंप्यूटर पर चलाया जाता है ऑपरेटिंग सिस्टम निर्दिष्ट उपयोगकर्ता के लिए पहचान टोकन उत्पन्न करता है। उस टोकन का उपयोग IsInRole फ़ंक्शन द्वारा किया जाता है समूह सदस्यता को मान्य करने के लिए। यह तेज़ है इसलिए मुझे यह वाकई पसंद है। हालांकि, WindowsIdentity/WindowsPrincipal को एक नया बनाने के बजाय मौजूदा टोकन को संदर्भित करने के बाद की कॉल। एकमात्र तरीका मुझे पता है कि टोकन को कैसे अपडेट करना है, से लॉग आउट करना है कंप्यूटर या रीबूट (जो टोकन कैश को साफ़ करता है)। क्या किसी को कैश किए गए पहचान टोकन को रीसेट करने का बेहतर तरीका पता है?

उदाहरण कोड सी #:

Using System.Security.Principal; 
WindowsIdentity impersonationLevelIdentity = new WindowsIdentity("Some_UserID_That_Isn't_Me", null); 
WindowsPrincipal identityWindowsPrincipal = new WindowsPrincipal(impersonationLevelIdentity); 
If (identityWindowsPrincipal.IsInRole("AN_AD_GROUP")) { ... 

वीबी:

Imports System.Security.Principal 
Dim impersonationLevelIdentity = New WindowsIdentity("Some_UserID_That_Isn't_Me", Nothing) 
Dim identityWindowsPrincipal = New WindowsPrincipal(impersonationLevelIdentity) 
if identityWindowsPrincipal.IsInRole("AN_AD_GROUP") then... 

उत्तर

0

बाहर निकलता है कि मैं गलत था। यह कैशिंग है, लेकिन यह एडी पक्ष पर प्रतीत होता है। आखिरकार जब मैं एक नई पहचान बनाता हूं विन्डोज प्रिंसिपल इसे सही समूह सदस्यता में अपडेट किया जाता है।

0

सुनिश्चित नहीं हैं कि अगर यह आपकी समस्या का समाधान हो सकता है, WindowsIdentity वर्ग के निपटाने विधि बुला, प्रत्यक्ष या परोक्ष प्रयास करें।

using (WindowsIdentity impersonationLevelIdentity = new WindowsIdentity("Some_UserID_That_Isn't_Me", null)) 
{ 
    // your code 
} 
+0

दुर्भाग्यवश इसका कोई प्रभाव नहीं पड़ता है। इसके व्यवहार से मुझे लगता है कि सुरक्षा टोकन ऑपरेटिंग सिस्टम द्वारा संग्रहीत किया जा रहा है और WindowsPrinciple मूल रूप से उस ऑब्जेक्ट के लिए एक सूचक है। (विंडोज़ शिष्य के पास कॉल करने के लिए कोई विनाशक नहीं है) इस प्रकार यह आवेदन के निष्पादन के बीच बनी हुई है। इच्छा है कि मैं जानता था कि कैश को कैसे फेंकना है। – Jeff

+0

बाहर निकलता है मैं गलत था। यह कैशिंग है, लेकिन मुझे यकीन नहीं है कि यह ओएस पर है - यह एडी पक्ष पर हो सकता है। आखिरकार जब मैं एक नई पहचान बनाता हूंविंडोज प्रिंसिपल इसे अद्यतन (सही) समूह सदस्यता प्राप्त करता है। – Jeff

+0

उस स्थिति में शायद एडी से पूछे जाने पर क्वेरी एडी को छोड़कर प्रोग्रामेटिक रूप से उपलब्ध समाधान नहीं है, जब आप एडी पूछते हैं तो आपको अपडेट किए गए परिणाम मिलते हैं - इन सुरक्षा टोकन के विपरीत जो हमेशा अद्यतित नहीं होते हैं। दुर्भाग्यवश, एडी पूछताछ धीमी है - कम से कम हमारे पर्यावरण में। – Jeff

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