0

現在、Google oauth api を使用して、Google ユーザーが自分のアプリにログインできるようにしようとしています。そして、Google のOAuth2Loginドキュメントに沿って進めてきました。

これを使用してコードを取得しましたが、問題なく機能しました。

var u = 'https://accounts.google.com/o/oauth2/auth?'
    + '&response_type=code'
    + '&client_id=' + opts.googleClient
    + '&redirect_uri=' + redirectURI
    + '&scope=' + opts.scope
    + '&approval_prompt=force&access_type=offline';

しかし、私は/o/oauth2/token以下のようなAPIでaccess_tokenを取得しようとしています:

    var u = 'https://accounts.google.com/o/oauth2/token?'
        + 'code=' + code
        + '&client_id=' + opts.googleClient
        + '&client_secret=' + opts.googleSecret
        + '&scope='
        + '&redirect_uri=' + redirectURI
        + '&grant_type=' + 'authorization_code';
    request.post({url: u, json: true}, fn);

それは私を返しました

{
    error: "invalid_request"
}

ネットワークバーのChrome開発者ツールで確認しましたが、リクエストURLがhttps://accounts.google.com/o/oauth2/approval?as=-5013c18c497345fc&hl=en&pageId=none&xsrfsign=APsBz4gAAAAAUcwS1TxlojrAPVNCj7ntTlz1H4xQgysC投稿先の代わりであることを示しています。

投稿の URL とデータがGoogle の oauthplaygroundとまったく同じであることを確認できます。しかし、結果はまったく異なります。

私は何か悪いことをしましたか?助けてください。

4

1 に答える 1

0

送信しているデータは正しいように見えますが、リクエストの作成方法に 2 つのエラーがあるようです。

最初に、メッセージのフォーム データ部分を作成するときに、すべての値を URL エンコードするようにしてください。

次に、GET ではなく POST を正しく実行しているにもかかわらず、リクエストの本文ではなくクエリ文字列でパラメーターを送信しています。それらを本文に移動し、コンテンツタイプを「application/x-www-form-urlencoded」に設定すると、設定する必要があります。

(JavaScript のように見えますが、どのライブラリを使用しているかわからないため、サンプル コードは提供していません)

于 2013-06-27T16:47:17.077 に答える