4

次の手順に従って、Google の OAuth2 認証サービスを呼び出そうとしています: https://developers.google.com/accounts/docs/OAuth2ForDevices

必要なすべてのパラメータをクエリ文字列に入れて、リクエストを送信しました。これは、「ユーザー コードの取得」セクションでは機能しましたが、「アクセス トークンと更新トークンの取得」セクションでは機能しませんでした。

いろいろ試して 400 Bad Request エラーを取得した後、データをクエリ文字列に入れる代わりに、FormUrlEncodedContent を使用してリクエストを作成し、application\x-www-form-urlencoded を使用してデータをコンテンツとして送信できることがわかりました。コンテンツ タイプ。

前のコードは次のとおりです。

var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(fullUrl);

fullUrl は次のようなものです。

https://accounts.google.com/o/oauth2/device/code?client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile

新しいコードは次のとおりです。

var requestMessage = new HttpRequestMessage();
requestMessage.Method = "POST";
requestMessage.RequestUri = new Uri(url);
requestMessage.Content = new FormUrlEncodedContent(CreateDictionary(queryStringNames, queryStringValues));

URL は次のとおりです。

https://accounts.google.com/o/oauth2/device/code

queryStringNames と queryStringValues は、必要なパラメーターの名前と値の文字列配列です。

これら2つの方法の違いは何ですか? データをクエリ文字列に入れる代わりに、すべての POST 呼び出しが URL エンコードされたコンテンツ要求を使用できると想定しても安全ですか?

4

1 に答える 1