2017-05-16 16 views
0

Office 365 Outlook REST API(バージョン2)を使用して、特定のメールボックスへのOutlookの購読を管理するWebアプリケーションがあります。サンプルを使用してトークンを取得し、認証コードフローを使用してAPIを正常に呼び出すことができました。Outlook REST API:AZURE AD認証を使用してAPIを呼び出そうとしています

今、私はクライアントの資格フローを使用し、Azure AD認証を使用して代理人権限でトークンを取得したいと考えています(私は、Office 365交換の下でアプリケーションに可能なすべての委任権限を与えました)。私がここに見たのと同じです: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; 

そして、ここでは、(このコードでシャープなRESTを使用してサブスクリプションを削除しようとしている)私はAPIを使用しようとしている方法は次のとおりです。

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

クライアントの資格フローを使用してリソースのトークンを取得する場合は、ユーザーの識別情報ではなくアプリケーションIDを使用しています。だからあなたのアプリケーションのアプリケーション権限を割り当てる必要があります(委任権限はありません)。また、ユーザーIDの代わりにアプリIDを使用しているため、APIはmehttps://outlook.office.com/api/v2.0/me)を認識できません。 Office 365でサービスとデーモンのアプリケーションを構築する方法については、hereをクリックしてください。

+0

私を助けてくれてありがとう。 UIの操作なしにデリゲート権限を活用する方法はありますか? 私は電子メールを投稿したくなかったので、_me_を使用しました。 APIがユーザーのメールを使用することになっていることを理解していますか?例:[email protected]? –

+0

[リソース所有者のフロー](https://blogs.msdn.microsoft.com/wushuai/2016/09/25/resource-owner-password-credentials-grant-in-azure-ad-oauth/)を使用すると、クライアント資格フローを使用している場合は、電子メールを渡すことで特別なユーザー情報を照会することができます。 –

+0

ありがとう、私は両方を試みるつもりです。リソースの所有者の流れは十分にシンプルに見えますが、(サービス/デーモンアプリケーションを構築するために)私に渡したリンクに固執しています。 –

関連する問題