2017-08-21 4 views
0

System.Net.Httpを使用して、access_tokenとid_tokenをAPIに送信するにはどうすればよいですか?私は郵便配達員と私のAPIをテストしていたとき、それは両方のトークンを送信し、私が必要とした個々のユーザー情報(ユーザーが販売している製品のリスト)を返すように見えました。私は自分のXamarinアプリでこれをやりとりすることができず、かなり長い間このことに固執しています。私は以下のようにaccess_tokenを送信することができますが、両方のトークンを送信したときに試したことは、404が見つかりませんでした。 (不正がそのようにaccess_tokenはまだ働いている401に修正された)System.Net.Httpを使用してAPIにaccess_tokenとid_tokenを送信する方法

 public async Task<string> GetResponseJsonString(string url) 
     { 
      string responseJsonString = null; 
      var access_token = CrossSecureStorage.Current.GetValue("access_token");   
      using (var httpClient = new HttpClient()) 
      { 
       httpClient.DefaultRequestHeaders.Clear(); 
       httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + access_token); 
       HttpResponseMessage response = httpClient.GetAsync(url).Result; 
       responseJsonString = await response.Content.ReadAsStringAsync(); 
      } 
      return responseJsonString; 
     } 

注:私はid_tokenは、ユーザー情報が含まれている必要があり承知していますし、それがユーザー情報の要求を送信するのではなく、デコードされなければなりません。私はこれを見て、xamarin PCLで動作するライブラリを見つけることができませんでした。私はJosePCL.Jwtを見ましたが、動作させることができませんでした。ユーザー情報が必要な時はいつでも、私のデータベースから情報を返しています。リクエストで両方のトークンを送信し、私のAPIにユーザー情報を取得させるのが理にかなっています。

答えて

0

これは、呼び出しているAPIに完全に依存しています。私はあなたに戻ってきたaccess_token以上のものを必要とするAPIを見たことがありません。ここで誤った命名法がある可能性があります。

"アクセスキー&秘密"を意味しますか?またはあなたはあなたがaccess_tokenを持っていると確信していますか?以下のように

前者の場合は、通常のAPIのは、物事を期待しています:「:」結果とAuthorization Bearer|Basicヘッダを設定し

  • Base64でエンコード
    • が一緒で区切られたキー&秘密を追加します

    id_tokenAuthorizationヘッダーとして渡してみることをお勧めします。

    また、郵便配達員からの返信が成功した場合の画面キャプチャを提供することもできます(機密データの難読化を確認してください)。

    また、コードの最適化を微調整することもお勧めします。 asyncを使用しているため、おそらくパフォーマンスが多少懸念されるようです。 thisの記事を見て、HttpClientの使い捨て性について議論してください。より良い代替手段として、次のようにHttpRequestMessageを使用:clientHttpClientの静的共有インスタンスへの参照である

    public async Task<string> GetResponseJsonString(string url) 
    { 
        string responseJsonString = null; 
    
        var req = new HttpRequestMessage(HttpMethod.Get, "/your/api/url");    
        req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", access_token); 
    
        using (var resp = await client.SendAsync(req)) 
        using (var s = await resp.Content.ReadAsStreamAsync()) 
        using (var sr = new StreamReader(s)) 
        { 
         if (resp.IsSuccessStatusCode) 
         { 
          responseJsonString = await sr.ReadToEndAsync(); 
         } 
         else 
         { 
          string errorMessage = await sr.ReadToEndAsync(); 
          int statusCode = (int)resp.StatusCode; 
    
          //log your error 
         } 
        }  
    
        return responseJsonString; 
    } 
    

    。このすべてを行うための私の好む方法は、私のAPI呼び出し、通常は1ファイルあたり1ファイルをラップすることです。私はこのサービスをシングルトンとして注入し、それはHttpClientという独自の静的インスタンスをブローカーにします。この設定は、.NETコアを使用している場合はさらに簡単です。

  • 関連する問題