2017-03-22 10 views
7

एक यूडब्ल्यूपी ऐप में, मैंने User Account Information क्षमता सक्षम की है।यूडब्ल्यूपी ऐप में कुछ उपयोगकर्ता खाता जानकारी प्राप्त करने में असमर्थ - इन-प्रिमाइज सक्रिय निर्देशिका (Azure AD नहीं)

मैं की वर्तमान उपयोगकर्ता लॉग ऑन उपयोगकर्ता नाम और डोमेन नाम (अलग से उनमें से प्रत्येक) (- नहीं Azure AD उपयोगकर्ता किसी इन-आधार सक्रिय निर्देशिका खाते से लॉग ऑन हैं) प्राप्त करने के लिए की जरूरत है।

उदाहरण के लिए, उपयोगकर्ता उपयोगकर्ता नाम user1 का उपयोग कर सक्रिय निर्देशिका डोमेन domain1 पर लॉग इन करेगा। यानी domain1\user1

मैं आवश्यक जानकारी प्राप्त करने की कोशिश करने के लिए निम्न कोड का उपयोग कर रहा:

IReadOnlyList<User> users = await User.FindAllAsync(); 

var user = users.FirstOrDefault(); 

// get domain 
var data1 = await user.GetPropertyAsync(KnownUserProperties.DomainName); 
string strDomainName = (string)data1; 

// get username 
var data2 = await user.GetPropertyAsync(KnownUserProperties.AccountName); 
string strUserName = (string)data2; 

मुद्दे:

  • strDomainName रिटर्न domain1.com\user1। इसमें हमारे सभी डोमेन के लिए .com भाग क्यों शामिल है? सी # Winforms अनुप्रयोगों पर हम बिना किसी मुद्दे के domain1\user1 आसानी से प्राप्त कर सकते हैं।
  • strUserName एक खाली स्ट्रिंग देता है। अर्थात। ""। यह कोई मूल्य क्यों नहीं लौटाता है?

    • KnownUserProperties.FirstName कोई रिक्त स्ट्रिंग रिटर्न:

    मैं भी निम्नलिखित की जाँच की। i.e. "

  • KnownUserProperties.LastName एक खाली स्ट्रिंग देता है। i.e. "
  • KnownUserProperties.PrincipalName एक खाली स्ट्रिंग देता है। i.e. "
  • KnownUserProperties.ProviderName एक खाली स्ट्रिंग देता है। i.e. "
  • KnownUserProperties.GuestHost एक खाली स्ट्रिंग देता है। i.e. ""

क्या मुझे कुछ और चीज है जो मुझे User Account Information क्षमता के समान सक्षम करने की आवश्यकता है? या क्या इस जानकारी को प्राप्त करने के लिए ऐप को कोई अन्य अनुमतियां दी जानी चाहिए?

मैं समझता हूँ कि मैं strDomainName का मूल्य मिलता है और मैं क्या जरूरत है पाने के लिए स्ट्रिंग कार्यों प्रदर्शन कर सकते हैं। लेकिन मैं जानना चाहता हूं कि इस जानकारी को सीधे प्राप्त करने का कोई तरीका है या नहीं। यह भी उत्सुक है कि KnownUserProperties.AccountName और ऊपर सूचीबद्ध अन्य गुण जैसे FirstName, LastName आदि बस एक खाली स्ट्रिंग देता है।

Windows Version

मैं Target version और Min Version के रूप में सेट निम्नलिखित है:

मैं Windows के निम्न संस्करण चला रहा

Target version and Min Version

सत्यापित करने के लिए, मैं भी साथ परीक्षण किया UserInfo sample project by Microsoft from GitHub और मुझे निम्न आउटपुट मिला:

UserInfo Sample project output

निम्नलिखित स्वचालित रूप से Settings>Privacy>Account Info में सक्षम था।

TestApp एप्लिकेशन के साथ मैं करने की कोशिश की है और User Info C# Sample GitHub से नमूना अनुप्रयोग है:

Settings-Privacy->AccountInfo

अद्यतन:

भी Enterprise Authentication क्षमता सक्रिय करने के बाद, KnownUserProperties.PrincipalName उम्मीद वापसी करता है मूल्य। यानी [email protected]। हालांकि, इस तरह के रूप में FirstName ऊपर सूचीबद्ध अन्य संपत्तियों, LastName आदि सिर्फ एक खाली स्ट्रिंग वापस आती है और मैं अभी भी किसी भी संपत्ति है कि (.com हिस्सा बिना) domain1\user1 रिटर्न

उत्तर

0

सूचना आप पहुँचने का प्रयास कर रहे हैं खोजने में असमर्थ हूं विश्वसनीय नहीं है, क्योंकि वे (जैसा आपने बताया है) सेट करने की आवश्यकता नहीं है और उन्हें सामान्य रूप से गोपनीयता सेटिंग्स के माध्यम से प्रतिबंधित पहुंच भी दी जा सकती है।

मैं एक ऐसी ही समस्या थी और आप का उपयोग करने के UWP OneDrive API

using Microsoft.OneDrive.Sdk; 

और फिर wl.basic गुंजाइश का अनुरोध सलाह देंगे। इस दायरे में कम से कम एक विश्वसनीय उपयोगकर्ता नाम शामिल है।

public static async Task<bool> GetAuthenticatedClient() 
{ 
    string oneDriveConsumerBaseUrl = "https://api.onedrive.com/v1.0"; 

    var scopes = new List<string> 
    { 
     "wl.signin", 
     "wl.basic", 
    }; 

    Task authTask; 

    var onlineIdAuthProvider = new OnlineIdAuthenticationProvider(scopes.ToArray()); 
    authTask = onlineIdAuthProvider.RestoreMostRecentFromCacheOrAuthenticateUserAsync(); 
    oneDriveClient = new OneDriveClient(oneDriveConsumerBaseUrl, onlineIdAuthProvider); 
    AuthProvider = onlineIdAuthProvider; 

    try 
    { 
     await authTask; 

     if (!AuthProvider.IsAuthenticated) 
     { 
      return false; 
     } 
    } 
    catch (ServiceException exception) 
    { 
     // Swallow the auth exception but write message for debugging. 
     //Debug.WriteLine(exception.Error.Message); 

     return false; 
    } 

    return true; 
} 

डोमेन के लिए के रूप में, मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन आप Environment.UserDomainName के माध्यम से इसे उपयोग करने MSDN पर वर्णित या Windows.Networking.Connectivity.NetworkInformation.GetHostNames() तरह वर्णित here साथ की तरह की कोशिश कर सकते।

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