2016-09-02 3 views
1

OAuth 2認証を実行する際に、ホワイトリストに記載されたリダイレクトURLをローカルにスプーフィングする必要があるユースケースがあります。OAuthプロキシからaccess_tokenを見つけることができません

私はスプーフィングしているドメインのホストファイルエントリと結合した非常に基本的なWebサーバーを実行しています。私は正しく私のトークンを交渉し、足にそれらを返すことができるんだけど、足が私のaccess_tokenまたはrefresh_tokenを拾っていない、それは単に生の応答が表示されます。

Paw authentication window

ここに私のサーバー・コードがあります(プレースホルダ機密データ用):

var http = require('http'), 
    request = require('request'); 

var PORT = 6109; 

var server = http.createServer(function(req, res) { 
    var code = req.url.split('?')[1].split('=')[2]; 

    request({ 
     url: 'https://<access token URL>/oauth2/token?code=' + code, 
     method: 'POST', 
     form: { 
      'client_id': <client_id>, 
      'client_secret': <client_secret>, 
      'grant_type': 'authorization_code', 
      'redirect_uri': <spoofed redirect URL> 
     } 
    }, function(err, response, data) { 
     data = JSON.parse(data); 

     res.writeHead(200, {'Content-Type': 'application/json'}); 
     res.write(JSON.stringify(data.result)); 

     // I also tried this with the same end-result 
     // res.writeHead(200); 
     // res.write('access_token=' + data.result.access_token + '&token_type=' + data.result.token_type + '&refresh_token=' + data.result.refresh_token); 
     res.end(); 
    }); 
}); 

server.listen(PORT, function() { 
    console.log('Server listening on port %d', PORT); 
}); 

私は何が欠けていますか? Pawが私のトークンを見つけられないのはなぜですか?ここで

は、参考のために私の設定です:

oauth configuration

他のいくつかの注目すべきポイント:

  • のOAuthプロバイダーは非標準であり、スペックからかなりの数のものをflubs(私のプロキシが存在します
  • リダイレクトURLのドメインは実際ですが、URLは解決されません(これはローカルホストエントリの理由の一部です)
  • 私は流れのこの部分を示していないんだけど、私が正しく私はあなたが認証URLとアクセストークンURLの間で、おそらく混乱していると思う前にcode

答えて

1

を与えられているに承認ステップを完了しています。 承認コード OAuth 2の許可タイプでは、Webページ(承認URL)にユーザー確認のステップが必要です。

私は代わりに、パスワードグラントまたはクライアントクレデンシャルを使用することを期待していますか?それ以外の場合は、認証URLを使用する場合は、認証URLにWebページを指定する必要があります。


注:私は、私が言及した最後の二つの補助金(パスワードグラント&クライアント資格情報)を使用して、足であなたのNode.jsのスクリプトを試してみた、それがうまく動作します。


アップデート:以下のコメントに続いては、私はより多くのあなたが何をしているかを理解しています。 承認リクエストは、成功した場合はリダイレクトURLページに302リダイレクト応答を返し、URLクエリパラメータをcodeに追加する必要があります。代わりにcodeのJSON応答を返すように見えるため、Pawはそれをキャッチしていません。

OAuth 2.0 spec (RFC 6749), section 4.1.2によると、承認レスポンスが付与されている場合、codeは、リダイレクトを行う際にURLクエリパラメータ(URLの?key=valueパラメータ)としてリダイレクトURLに渡す必要があります。

リソースの所有者がアクセス要求を許可した場合、承認 サーバーは認証コードを発行し、「アプリケーション/ Xを使用して リダイレクトURIのクエリコンポーネントに以下のパラメータを追加すること して、クライアントに配信-www-form-urlencodedで」フォーマット

スペックから例を引用は、ここでそれは成功だ場合のようになります。認証リクエストの応答が(コードが付与される)方法は次のとおりです。

HTTP/1.1 302 Found 
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA 
      &state=xyz 
+0

私は用語を混乱させる可能性が高いですが、あなたが言及した他の助成金タイプではなく、認可コード付与タイプが必要です。更新された質問の私の認証設定の添付スクリーンショットを参照してください。 –

+0

私は、認可の手順を見て通過することにも言及する必要があります。私は後でトークンを取得しています。応答からのトークンを手動でコピーして対応するauthフィールドに貼り付けると、すべて動作します。私が直面している問題は、トークンが自動的にそれらのフィールドに値を設定していないということです。 –

+0

後半は申し訳ありません!私はいくつかの混乱があると思う...助成金の種類 "認証コード"でコードは、URL paramを介して第三者(ここでは、Paw)に渡す必要があります。次に、クライアントアプリケーションはヘッドレスHTTPリクエスト(webviewではなく)でトークンを取得します。しかし、ここであなたの認証URLは "access_token"を直接表示(またはリダイレクト)しています。ここで、PawはまだリダイレクトURLのURLパラメータの "code"値を見つけるのを待っています。 –

0

リダイレクトURLに「私のなりすましのウリ」が含まれていることがわかりました。

認証コードフローを使用する必要がある場合、認証コードを提供してUriをリダイレクトします。

提供するURIが、アイデンティティ・サーバーのクライアント用に保存されたURIと一致しない場合、URIがクライアント認証コードと一致しないため、トークンを取得できません。

例えば: Auth Code: "xyx" Redirect Uri: "www.mylocalhost.com\xyz"

をそして、あなたの例では、あなたが提供している組み合わせは次のとおりです:文句を言わない受信なしのトークンは存在しません一致 Auth Code: "xyx" Redirect Uri: "<my spoofed uri>"

2これらの通りであるアイデンティティサーバーにクライアントのアイデンティティを考えてみましょう。

アイデンティティサーバーでクライアントに登録されている正しいURIを使用すると、トークンを受け取ることができると思います。

+0

私はトークンを取得しています...彼らは私の質問の中にあります。これらはOAuthプロバイダによって正しく配信されます。 '<私のなりすましURL>'は私がここに公開したくない私的な情報であるため実際のURLを編集しているだけです。 –

関連する問題