2017-07-31 116 views
0

我想通過微軟的Graph API從Azure Active Directory中讀取用戶的數據。使用圖形瀏覽器,我可以獲得所有用戶,但使用獨立應用程序後,我收到令牌後最終會收到「未經授權」的響應。我顯然錯過了一些步驟,但對我而言,這不是很明顯。任何有識之士將不勝感激Microsoft Graph Api令牌無效或未經授權?

下面的代碼是基於斷MSFT樣本:

// config values 
// authority = "https://login.microsoftonline.com/{ TENANT ID }/oauth2/" 
// resource uri = "https:// APP NAME .azurewebsites.net"; 
// graph uri = https://graph.windows.net/TENANT ID/ also tried https://graph.windows.net/v1.0/ 


// short form 
public async void GetUsers(ADConfiguration config) 
{ 
    _authContext = new AuthenticationContext(config.GetAuthority()); 
    _clientCredential = new ClientCredential(config.ClientId, config.ClientSecret); 

    AuthenticationResult result = null; 

    // obtain the token, this part is still successful 
    result = await _authContext.AcquireTokenAsync(config.ResourceUri, _clientCredential); 

    _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 


    string address = config.GetGraphiUri() + "users?api-version=1.6"; 

    // this response is always unauthorized 
    HttpResponseMessage response = await _httpClient.GetAsync(address); 

} 

回答

0

你的配置值似乎關:

管理局應該是:https://login.microsoftonline.com/{TENANT ID}

在我看來,您正在嘗試使用Azure AD Graph API,而不是Microsoft Graph API。

在這種情況下:

資源URI應該是:https://graph.windows.net/。 (MS Graph API是https://graph.microsoft.com/

+0

感謝您的回答。建議將錯誤消息從「未授權」更改爲「禁止」。一個橫向移動我猜... 我相信資源uri是指Azure上的AD服務器。無論哪種方式,我嘗試過任何變化沒有太多的成功。 – Mark

+0

禁止表示您的應用程序沒有必要的權限。檢查是否已將它們添加到Azure AD Graph。 – juunas

+0

我們有兩個可以訪問的API:'Windows Azure Active Directory'和'Microsoft Graph',它們都有權限執行所有操作。我已經在尋找'Azure AD Graph'來添加API訪問權限,但是這不會作爲選項提供。 – Mark

1

除了回答你的新問題。從您的代碼中,您使用client credential flow獲取令牌。在客戶端憑證流程中,權限直接授予應用程序本身。

由於您使用Azure的AD圖形API,你需要添加application permission

  1. 在Azure的門戶網站,選擇您的應用程序,點擊Settings
  2. 在設置菜單中,選擇Required permissions部分,選擇Windows Azure Active Directory(Azure廣告圖api),添加您的應用所需的相關應用程序權限。
  3. 在您的應用程序的刀片中,點擊Grant Permissions以執行管理員對您的管理員憑據的同意。
+0

謝謝,就像我告訴Juunas,我們有兩個可以訪問的API:'Windows Azure Active Directory'和'Microsoft Graph',它們都有權限執行所有操作。 我懷疑我在這裏忽略了一些基本的東西...... – Mark

+0

請使用[此工具](http://jwt.calebb.net/)解碼您的訪問令牌,並檢查是否包含在角色中的任何應用程序權限 –

+0

Nan指出你的令牌解碼器網站未來可能會消失。請使用此代替(功能相同):https://jwtinspect.azurewebsites.net/。 @Mark是您使用AAD還是Microsoft Graph的API?無論哪種情況,如果您使用的是client_credentials流程,則管理員需要授予您的API調用的許可/權限才能發揮作用。 –

相關問題