2

C#コードからOutlook Calendar REST APIにアクセスするためにMicrosoft.Graphライブラリを使用しようとしています。Microsoft Graph Client Libraryにアクセストークンを適用する

私のアプリケーションでは、Outlookの予定表にイベントの一覧を送信しようとしています。 Outlook REST APIリファレンスを読んだ後に、1つのhttp要求でイベントの一覧を送信できないことが判明したので、Microsoft.Graphライブラリをプロジェクトに接続しました。 はServiceException:コード:InvalidAuthenticationToken メッセージ:CompactTokenの解析ができませんでした。エラーコード:-2147184118

public static string clientId = ConfigurationManager.AppSettings["OutlookCalendarClientId"]; 
public static string clientSecret = ConfigurationManager.AppSettings["OutlookCalendarClientSecret"]; 
public static string redirectUri = "https://localhost:56110/appointments/calendar"; 
public static string scope = ConfigurationManager.AppSettings["OutlookCalendarRWScope"]; 
public static string accessToken = "EwAgA+l3BAAUWm1xSeJRIJK6txKjBez4GzapzqMAAUOcqDTcOceYJGraa4Q4StlEcWf9iaTwtQECi2/jBcvYwGqwrJ1mTU+ERYp0wJg1ADPAluTd5zkvv6IBxjeUzM6BtONBpFS8ZLaDjNWgNMFKOjAz61F/shGmo4Hp7MER6gYNpxhGwH0RNO0cJsRy7bE4JQWaGro83sZq2NtPBB7qg23OKdeSWVq1ardL9SNHYb4nWWRnm9GNxPGy7nVWK0ZLF7YWNS5rsY34b8MEQetMetVmU0SY7HGDIGrFzmD1YNsBbxO94UGcsoitcjnh8JIWLPflPdLPpbaZCxuoWQhVEZO2TN70SMuJOzixjQQ1tZB62gTlUmP6C36Pug2OMYUDZgAACOCpEMwEMVuu8AFrzisYPh5GC0P+u1ps2//daB+4qoxbqJU8ojACUqd7NGMiZjU1rkCpAuUjLJHMpETZsxETxIed0nA+9FQ4ALuzJmdb/iOZo1es1hil0R8MiYt1kCypfNq6+VWSS8AnKNOPq7hed7E+Zz+V559rLqusPIqMntWGwuK/6Mq4fgMEM4Em/iZ2c1yPcuI6Dqvq5wEdsqWEWS/xSXQQfbRayUZDUMNVoqpfiWTXQ6XBFpXPkZU8Q1+PcerGiGAXPbxe4WIDdmLteS8kATde5aO+RHpe3Dd3Hpqeo+nZKb4jg3ypqW9na9NnRkr+RC+BO5AxIS0CfmIdKIlR9lvRjBmscAncg/3ZH2LXUlwXeQPhp4tJltq7V8bFhAjBWH/d35CV0pUbeqcuvRLq77O1xr375NAH6aS2FHkhuC5zQ38xh7o3lKZRcmdX6Pgcf/m91EC6ktFAVrDN2DnXoFhk+mrhsF4MmiKhNU1SoTWEzBRY3d2Y1hfWAyZYBRJtYqRgNjPCX1NQvOvTuTN9jCbpPxXlrVYpJ76jflyM/CKrjpbTqKLPlF/p3B//8KIacvDK2c2IHYGK/osqlZUXX/I5bsfiNZNRm0UuwOU9xBl8Q5CydFDwmTm/mxfIw+OCCAgJd/fZ0QxI5oyBxfs8l5up+50ZuIYgGAI="; 

var client = new GraphServiceClient(
     new DelegateAuthenticationProvider(
      (requestMessage) => 
      { 
       requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 

       return Task.FromResult(0); 
      })); 

      var response = client.Me.Calendar.Events.Request().GetAsync().Result; 
私はグラフのクライアントを経由して、私のカレンダーへのアクセスを取得しようとしていたとき、私は次のメッセージを持つ例外を持っています

https://login.microsoftonline.com/common/oauth2/v2.0/authorize 
?client_id=MY_APPLICATION_ID 
&scope=openid+https://outlook.office.com/calendars.readwrite 
&redirect_uri=http://localhost:56110/appointments/calendar 
&response_type=code 

:こちらを提示

アクセストークンは、私が(APIリファレンスで述べたように)2つのHTTPリクエストを送信することにより得ました

グラフクライアントで使用しようとしている実際のアクセストークンが最後の要求で返されました。このケースで最も興味深いのは、休憩サービスを直接(例えば、フィドラー経由で)呼び出すときにこのトークンを使用できますが、グラフクライアントの場合は使用できませんでした。

今、私はこれがなぜうまくやっているのか、また、アクセストークンをグラフクライアントに有効に提示する方法を見つけようとしていますか? 誰もこのような問題に直面していますか?

+0

コードで投稿した '' accessToken''は無効です。ベアラートークンは、完全停止(。)で区切られた3つの部分に分かれているJWTトークンでなければなりません。 ヘッダーと署名の部分を偶然にカットできますか? – RasmusW

答えて

2

説明に基づいて、OutlookカレンダーRESTでMicrosoft Graph RESTを呼び出すaccess_tokenを使用していました。

これら2つのRESTでは視聴者が異なるため、これは機能しません。カレンダーを読むためのMicrosoft Graph RESTのaccess_tokenを取得するには、Calendars.Readスコープを使用できます。そして、あなたは以下の要求を参照することができます。

GET:https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id={client_id}&scope=Calendars.Read%20offline_access&redirect_uri={redirect_uri} 

トークンを取得します:マイクロソフトグラフのためのスコープについて

POST:https://login.microsoftonline.com/common/oauth2/v2.0/token 
client_id={client_id}&client_secret={client_secret}&grant_type=authorization_code&redirect_uri={redirect_uri} 

より詳細な情報を、あなたが参照できる

は、認証コードを取得します。以下のリンク:

Microsoft Graph permissions reference

関連する問題