2017-03-03 3 views
0

私は青空でホストされているWebアプリケーションを持っています。私が郵便配達員を使ってリクエストをするとき、私は jsonの結果を得ます。これはcorrecetの応答です。同じトークンを使用してC#経由で同じリクエストを作成しようとすると、errprが返されます - リモートサーバーからエラーが返されました:(401)Unauthorized。httpはブラウザとポストマンで動作しますが、C#httpwebrequestを使用して401を取得します

ここにリクエストに使用するコードがあります。

public string RequestData(string queryString, string token) 
{ 
    var request = (HttpWebRequest)WebRequest.Create(queryString); 
    request.Proxy = GetProxy(); 
    request.Credentials = CredentialCache.DefaultCredentials; 
    request.PreAuthenticate = true; 
    request.UseDefaultCredentials = true; 
    request.Method = "GET"; 
    request.ContentType = "application/json"; 
    request.ContentLength = 0; 
    request.CookieContainer = new CookieContainer(); 
    request.Headers.Add("authorization", "Bearer " + token); 

    using (var webresponse = request.GetResponse()) 
    { 
     if (webresponse.GetResponseStream() == Stream.Null) 
     { 
      throw new Exception("Response stream is empty"); 
     } 

     var response = (HttpWebResponse)webresponse; 

     if (response.StatusCode != HttpStatusCode.OK) 
     { 
      return response.StatusCode.ToString(); 
     } 
     else 
     { 
      return response.StatusCode.ToString(); 
     } 
    } 
} 

私はそれが正しいことを確認するためにトークンをダブルチェックしました。 私が言いたいことは、インターセプタを有効にしないで Postmanで最初に動作しなかった点です。これは、Advanced Rest Clientになります。 "XHR"を有効にしてARCクッキー交換をインストールするまでリクエストが機能しませんでした。

私はFiddlerのリクエストヘッダーをチェックしましたが、それ以外のヘッダーはありません(私も同様に追加します)。

UPDATE:

私は郵便配達で成功し応答(https://www.getpostman.com/) を持って、それがRestSharpを使用してC#のために生成されたコードを実行しました。応答 でスローされたエラーは

"このディレクトリまたはページを表示する権限がありませんでした。

トークンが正しくないことを示す。これはPostmanとAdvanced Rest Clientで が動作するので混乱します。また、私は、私は次のコードを使用してのClientIDと秘密使って呼び出しごとにトークン を取得言及する必要があります:紺碧にログをチェックした後

public async static Task<AzureAccessToken> CreateOAuthAuthorizationToken(string clientId, string clientSecret, string resourceId, string tenantId) 
     { 
      AzureAccessToken token = null; 
      var oauthUrl=string.Format("https://login.microsoftonline.com/{0}/oauth2/token", tenantId);  
      var reqBody = String.Format("grant_type=client_credentials&client_id={0}&client_secret={1}",clientId, clientSecret);     
      var client = new HttpClient(); 
      HttpContent content = new StringContent(reqBody); 
      content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded"); 
      using (HttpResponseMessage response = await client.PostAsync(oauthUrl, content)) 
      { 
       if (response.IsSuccessStatusCode) 
       { 
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AzureAccessToken)); 
        Stream json = await response.Content.ReadAsStreamAsync(); 
        token = (AzureAccessToken)serializer.ReadObject(json); 
        return token; 
       }  
       return null; 
      } 
     } 
+1

愚かな質問ですが、あなたの郵便配達人にはトークン変数で使用されているのと同じトークン値が使用されていますか? –

+0

はい、ダブルチェックしました – noobie

+0

この場合、私はあなたのプロキシがリクエストをブロックしていると信じています –

答えて

0

を、私は次のエラーメッセージを見た:

JWTの検証に失敗しました:IDX10214:オーディエンスの検証に失敗しました。オーディエンス: '00000002-0000-0000-c000-000000000000'一致しませんでした:validationParameters.ValidAudience: 'f50a9d02-b8f4-408f-aaf8-0046e6cbf7a6'またはvalidationParameters.ValidAudiences: 'null'

「Azure Active Directory設定」の下の「許可トークンオーディエンス」に「00000002-0000-0000-c000-000000000000」を追加して問題を解決しました。

関連する問題