2016-11-14 49 views
0
  • 我有一個webapi,它是由服務代表用戶調用的。
  • 我有用戶ID,但不是他們的身份驗證令牌。

我的目的是檢查這個用戶是否屬於一個指定的組。將AAD圖形API作爲特定用戶查詢

我試圖連接到與服務帳戶的圖形,但我不知道怎麼樣。我試過看過UserPasswordCredential,但AcquireTokenAsync並不把它當作一個參數,但它確實需要一個UserAssertion我很難找到正確構建該對象的文檔。

任何幫助,將不勝感激。

+0

爲什麼要查詢該用戶?爲什麼你不能查詢getMemberGroups? https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/functions-and-actions#getMemberGroups – 4c74356b41

+0

@ 4c74356b41我想查詢作爲我的服務帳戶,以檢查該用戶是否屬於組。我不想以該用戶身份進行查詢。 – ohmusama

回答

2

如果您使用.Net Framework進行開發,則AcquireTokenAsync確實使用UserPasswordCredential提供了計算方法。

這是給你參考的代碼示例:

AuthenticationContext authenticationContext = new AuthenticationContext(UserModeConstants.AuthString, false); 
string resrouce = ""; 
string clientId = ""; 
string userName = ""; 
string password = ""; 
UserPasswordCredential userPasswordCredential = new UserPasswordCredential(userName, password); 
var token= authenticationContext.AcquireTokenAsync(resrouce, clientId, userPasswordCredential).Result.AccessToken; 

我使用的版本3.13.5.907 Microsoft.IdentityModel.Clients.ActiveDirectory。此方法僅適用於您在Azure AD上註冊的本地客戶端應用程序,因爲它不提供憑據。如果您希望它適用於Web應用程序/ Web API,則可以直接發出HTTP請求,如下所示:

POST: https://login.microsoftonline.com/xxxxx.onmicrosoft.com/oauth2/token 

Content-Type: application/x-www-form-urlencoded 
resource={resource}&client_id={clientId}&grant_type=password&username={userName}&password={password}&scope=openid&client_secret={clientSecret} 
+0

除了我需要我的服務帳戶授予應用程序權限外,這是行不通的。任何想法如何簡單地做到這一點。 – ohmusama

+0

你的意思是你想讓應用程序訪問資源而不是服務帳戶?如果我理解正確,而不是使用**資源所有者密碼憑證**,我們需要使用**客戶端憑證**。關於這個流程的更多細節,你可以參考這裏的鏈接(https://graph.microsoft.io/en-us/docs/authorization/app_only)。 –

+0

哦,不,我的應用程序沒有所需的委託權限來執行我所需的操作,所以我試圖以服務帳戶登錄,但服務帳戶尚未授權應用程序代表它執行操作。 :) – ohmusama