2017-05-16 96 views
0

使用Office 365 Outlook REST API(版本2),我有一個Web應用程序管理對特定郵箱的Outlook訂閱。我已經能夠使用這些示例獲取令牌併成功使用授權代碼流調用API。Outlook REST API:嘗試使用AZURE AD身份驗證調用API

但現在,我想用一個客戶端憑證流,並通過委派權限使用Azure的AD認證獲得令牌(我給應用程序的所有可能的代理權限下的Office 365的Exchange Online)。類似於我在這裏看到的:Get Office 365 API access token without user interaction

我已經註冊了我的申請並獲得了我的租戶ID,客戶ID爲&的祕密。我已經能夠獲得令牌,但是當我嘗試使用它時,我得到了401,未經授權的回來。

這裏是我應得的令牌:

AuthenticationContext authContext = new AuthenticationContext($"{authority}{tenantId}"); 
clientCredential = new ClientCredential(client_Id, secret); 
authResult = await authContext.AcquireTokenAsync(resource, clientCredential); 
authResult.AccessToken; 

這裏就是我想要使用的API(嘗試刪除使用REST銳在此代碼訂閱):

var token = await GetOtherToken(account); 
rc = new RestClient("https://outlook.office.com/api/v2.0");      
rc.AddDefaultHeader("Authorization", $"Bearer {token}");       
request = new RestRequest($"me/subscriptions('{restSubId}')", Method.DELETE); 
request.AddHeader("Content-Length", "0"); 
request.AddHeader("Content-Type", "multipart/form-data"); 

看起來這是不可能的。請有人放棄一些知識。謝謝閱讀。

回答

0

當使用客戶端憑證流獲取資源令牌,你正在使用的應用程序的身份而不是作爲一個用戶的身份。所以你應該爲你的應用程序分配應用程序權限(而不是委託權限)。另外,由於您使用的是應用程序標識而不是用戶的標識,因此api無法識別mehttps://outlook.office.com/api/v2.0/me)。請點擊here瞭解如何在Office 365中構建服務和守護程序應用程序。

+0

感謝您的幫助。有沒有一種方法來利用委託權限而無需UI交互? 我用_me_因爲我不想發佈我的電子郵件。我知道API應該使用用戶電子郵件?例如:[email protected]? –

+0

您可以使用[資源所有者流](https://blogs.msdn.microsoft.com/wishuai/2016/09/25/resource-owner-password-credentials-grant-in-azure-ad-oauth/),如果使用客戶端憑證流程,則可以通過傳送電子郵件來查詢特殊用戶信息。 –

+0

謝謝,我打算試一試。雖然資源所有者流程似乎夠簡單,但我仍然停留在您給予我的鏈接上(構建服務/守護程序應用程序):配置證書令人困惑。 –

相關問題