2011-04-04 105 views
3

我試圖實現SSO(單點登錄),但我無法獲得正確的用戶名。SSO獲取用戶名/域

在我的地方,當我檢索當前登錄的用戶時,我得到:[email protected]。哪個是對的。當客戶執行相同的代碼時,它將返回:[email protected]。但在這種情況下,它是不是正確。客戶的期望值爲[email protected]

我對SSO不太瞭解有關INTRANET部分的任何內容。在客戶處,其他軟件也使用SSO,因此需要「我的」軟件將用戶/域格式化爲[email protected]

我試過幾段代碼來檢索當前登錄用戶的用戶/域。以下結果來自客戶。

UserPrincipal.Current.UserPrincipalName - returns [email protected] 
System.Environment.UserDomainName - returns INTRANET 
WindowsIdentity.GetCurrent.Name - returns INTRANET\user 

所以我正在尋找一種方法來檢索當前登錄的用戶與'子域'(內聯網)完整的用戶名以及。有人知道我在做什麼錯嗎?

* 編輯:*我改寫了我的問題。我覺得我的英語日益惡化......:S

+0

您如何知道'正確'([email protected])?使用該方法。如果你獲得了用戶名和完整的域名,並添加了'@',那麼在代碼中執行該操作 - 如果你查看了一些對話或命令行讀數,是什麼工具?發現它使用哪個API – 2011-04-04 11:30:35

+0

好問題。我會更新我的問題來重新解釋問題並回答您的問題。 (評論不允許標記等) – Rhapsody 2011-04-04 11:50:48

+0

您是否在每個環境中都有活動目錄或其他目錄服務?您可以使用它來查找使用您目前擁有的信息的其他信息。聽起來像你的客戶有這樣的環境。 – 2011-04-04 12:00:43

回答

2

請嘗試下面的代碼。

string domainName = System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName; 
string nametext = WindowsIdentity.GetCurrent().Name.Split('\\')[1]; 

//OR 
// string nametext = Environment.UserName; 

string fullname = String.Format("{0}@{1}", nametext, domainName); 
+0

這似乎一見鍾情!我明天繼續這個。現在感謝!但你究竟發現了這個IPGlobalProperties類:P – Rhapsody 2011-04-04 14:27:29

+0

@Rhapsody:Google :) – Aamir 2011-04-05 04:33:20

+0

非常感謝你!您提供的代碼適用於我們的情況!我搜索了錯誤的關鍵字,不幸的是有很多方法可以檢索域的一部分... – Rhapsody 2011-04-05 08:37:12