2017-12-06 7 views
1

を与える、私はセットアップにマイクロソフトグラフを使用してサブスクリプションをしようとしていますが、私は次のエラーを取得しておいてください。 マイクロソフトグラフ上のサブスクリプションを設定すると、認証エラーに

{ 
    "error": { 
     "code": "InvalidAuthenticationToken", 
     "message": "CompactToken validation failed with reason code: 80049228.", 
     "innerError": { 
      "request-id": "18c0ce19-cedc-4184-a46f-319e1a350901", 
      "date": "2017-12-05T15:59:06" 
     } 
    } 
} 

これは私がそれを行うために使用しているコードです。 :

HttpWebRequest qboApiRequest = (HttpWebRequest) WebRequest.Create("https://graph.microsoft.com/v1.0/subscriptions"); 
qboApiRequest.Method = "POST"; 
qboApiRequest.Headers.Add(string.Format("Authorization: Bearer {0}", token)); 
qboApiRequest.ContentType = "application/json;charset=UTF-8"; 
qboApiRequest.Accept = "*/*"; 

string postData = @"{{""changeType"": ""created,updated"", ""notificationUrl"": ""http://www.somesite.com/response.ashx"", ""resource"": ""me/events"", ""expirationDateTime"": ""2017-12-20T18:23:45.9356913Z"", ""clientState"": ""subscription-identifier""}}"; 
var encoding = new UTF8Encoding(); 
var bytes = Encoding.GetEncoding("iso-8859-1").GetBytes(postData); 
qboApiRequest.ContentLength = bytes.Length; 
using(var writeStream = qboApiRequest.GetRequestStream()) 
{ 
    writeStream.Write(bytes, 0, bytes.Length); 
} 

// get the response 
string responseText; 
HttpWebResponse qboApiResponse = (HttpWebResponse) qboApiRequest.GetResponse(); 
using(var qboApiReader = new StreamReader(qboApiResponse.GetResponseStream())) 
responseText = qboApiReader.ReadToEnd(); 

私は私はあなたがどのようなエラーに

+0

Microsoft Graphは、「トークンは大丈夫です」と明確に同意しません。 'トークン'またはそれを取得するために使用しているコード(スコープを含む)を含めてください。このエラーは、この操作でトークンが有効でないことを示しています。 –

答えて

0

を得ている理由として損失でだので、それは他のもので大丈夫動作するため、トークンが大丈夫であることを知っていますそれは他のものでうまく動作することを意味しますか? Microsoft Graphにアクセスするには、webhookを購読する必要があります.calendard.readが必要です。 jwt.ioを使用してトークンをチェックしてみてください。アプリの登録方法私は、adminレベルでそれをadminconsentに登録するアプリケーションレベルの認証を使用しました。トークンを生成するには、このコードの平和を使用してください。

public static async Task<GenericToken> GetAppToken(string Dom) 
     { 
      const string Scope = "https://graph.microsoft.com/.default";      
      string request_content = $"grant_type=client_credentials&scope={Scope}&client_id={ClientId}&client_secret={ClientSecret}"; 
      HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/{Dom}/oauth2/v2.0/token"); 
      request.Content = new StringContent(request_content, Encoding.UTF8, "application/x-www-form-urlencoded"); 
      //HttpClient client = new HttpClient(); 
      HttpResponseMessage response = await staticClient.SendAsync(request); 
      return await response.Content.ReadAsAsync<GenericToken>(); 

     } 
+0

たとえば、カレンダーでイベントを作成するときにトークンを使用すると、うまく動作します – Shazoo

+0

あなたのコードでは、OPがClient_Credentialsとv2 Endpointの両方を使用していると想定しています。それは常に安全な仮定ではありません。 –

+0

アプリのセキュリティをどのように管理するかによって異なります。 BTW私は動作する例としてそれを提供します。質問のために、私は彼がトークンをチェックして、何かが委任に間違っているかどうかを理解しなければならないと思う。 – Guru98

関連する問題