2

我正在研究受Azure Active Directory保護的webapi webservice。網絡服務基於登錄的用戶大量使用Office 365(SharePoint/Yammer)。使用Azure AD進行web api集成測試

測試web api終端節點我正在編寫一個控制檯應用程序,讓我用我的AAD憑據登錄,然後調用端點。它的工作原理,但尋找的東西來取代這種測試web api的方式。如果它更具可重複性,並且我不必每次都填寫我的憑證,那將會很棒。我正在尋找一個單元測試項目,但無法讓Azure AD登錄工作。

任何提示如何使這更容易?

回答

0

如果您不想「每次都填寫我的憑證」,則一種解決方法是使用Resource Owner Password Credentials Grant flow。此流程可以輕鬆獲得令牌。在控制檯應用程序中,您可以直接使用用戶帳戶和密碼獲取受保護的Web API的訪問令牌。下面的代碼是供你參考:

static void Main(string[] args) 
    { 

     test().Wait(); 
    } 


    public static async Task test() 
    { 

     using (HttpClient client = new HttpClient()) 
     { 
      var tokenEndpoint = @"https://login.windows.net/a703965c-e057-4bf6-bf74-1d7d82964996/oauth2/token"; 
      var accept = "application/json"; 

      client.DefaultRequestHeaders.Add("Accept", accept); 
      string postBody = @"resource=https%3A%2F%2Fgraph.microsoft.com%2F //here could be your own web api 
      &client_id=<client id> 
      &grant_type=password 
      &[email protected] 
      &password=<password> 
      &scope=openid"; 

      using (var response = await client.PostAsync(tokenEndpoint, new StringContent(postBody, Encoding.UTF8, "application/x-www-form-urlencoded"))) 
      { 

       if (response.IsSuccessStatusCode) 
       { 
        var jsonresult = JObject.Parse(await response.Content.ReadAsStringAsync()); 
        var token = (string)jsonresult["access_token"]; 
       } 
      } 
     } 
    } 

但問題是,流量將直接在代碼中暴露的用戶名和密碼,它帶來潛在的攻擊的風險,以及我們會一直避免直接處理用戶憑據。因此,請確保您只是使用此流程在安全環境中進行測試。有關更多詳細信息,請參閱this article

+0

如果你走這條路線,請務必閱讀Vittorio的博客文章,瞭解此流程的侷限性:http://www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-用戶-通usernamepassword / – dstrockis

0

最簡單的方法是將測試運行器定義爲Azure AD中的應用程序,並讓它使用自己的客戶端ID和祕密調用API。

要做到這一點有你需要做的幾件事情:

  1. 添加appRoles到您的API在其Azure的AD清單。這些是應用程序權限。
  2. 定義您的測試運行器,並讓它爲您的API提供必要的應用程序權限。
  3. 在您的測試運行器中,您現在應該能夠獲得帶有客戶端ID和測試運行器的祕密的訪問令牌,無需用戶驗證。

對於API端的應用程序權限也需要一些設置,授權也必須查看角色聲明。

你可以在這裏找到一個定義應用權限的例子,並在這裏處理它們:http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/

有關定義應用權限的更多信息:https://stackoverflow.com/a/27852592/1658906

有關AAD中應用程序清單的更多信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-manifest

編輯:如果您必須代表用戶在API中調用,那麼這當然不會工作。

在這種情況下,我會建議創建一個用戶帳戶,以便運行測試。最好不要對其憑據進行硬編碼,而是將它們存儲在別處。

+1

我不認爲它會工作。我必須更多地強調它,但SharePoint似乎並不接受應用程序身份驗證方法; –

+1

對,如果您必須代表用戶撥打電話,那麼唯一的選擇是創建用於測試的用戶帳戶。 – juunas

相關問題