2015-04-01 57 views
2

我正在開發一個客戶端 - 服務器應用程序。在使用此應用程序時,客戶端和服務器具有相同的AD(Active Directory)域。如何獲取用戶的Active Directory令牌?

我希望我的服務器應用程序通過其AD用戶對每個客戶端進行身份驗證。這意味着,當用戶運行客戶端應用程序的實例時,服務器應該知道哪個AD用戶正在使用此應用程序實例並對其進行身份驗證。所以,客戶端應用程序必須發送一些信息給服務器

一種解決方案是發送用戶AD用戶名。由於安全原因,此解決方案是不可接受的。

另一種解決方案是發送用戶AD令牌(它在登錄到Windows時被提供給AD用戶)。在此解決方案中,服務器可以檢查此令牌的有效性,因此它可以識別客戶端AD用戶並對其進行身份驗證。現在的問題是,在實現客戶端應用程序時,我不知道如何獲取AD令牌。

我正在使用C#實現客戶端應用程序。你能幫我解決嗎?或者你有更好的解決方案來進行這種認證嗎?

回答

1

從azure門戶獲取clientid/appid,secretkey並獲取令牌。 您的目錄名稱可以通過將您的帳戶固定在右上角找到。

string tenantName = "yourdirectoryName.OnMicrosoft.com"; 
      string authString = "https://login.microsoftonline.com/" + tenantName; 
      AuthenticationContext authenticationContext = new AuthenticationContext(authString, false); 
      // Config for OAuth client credentials    
      ClientCredential clientCred = new ClientCredential(clientId, appKey); 
      string resource = "https://graph.windows.net"; 
      string token; 
      try 
      { 
       AuthenticationResult authenticationResult = authenticationContext.AcquireToken(resource, clientCred); 
       token = authenticationResult.AccessToken; 
      } 
      catch (AuthenticationException ex) 
      { 
       Console.ForegroundColor = ConsoleColor.Red; 
       Console.WriteLine("Acquiring a token failed with the following error: {0}", ex.Message); 
       if (ex.InnerException != null) 
       { 
        Console.WriteLine("Error detail: {0}", ex.InnerException.Message); 
       } 
      } 
+0

嗨@Kurkula,你能爲我解釋什麼應該是「tenantName」,「clientId」,「appKey」和「資源」的值,我在哪裏可以得到它們?謝謝。我對上面的作者有同樣的問題。 – Anthony 2018-02-27 16:59:57

相關問題