OAuth サービス プロバイダーと通信する必要がある Python アプリケーションを構築しています。SP では、コールバック URL を指定する必要があります。localhost を指定しても、明らかに機能しません。公開サーバーをセットアップできません。サーバー/ホスティングの支払い以外にアイデアはありますか? これは可能ですか?
7 に答える
2つのこと:
問題の OAuth サービス プロバイダーは、コールバック URL を指定しないとエラーが発生する場合、OAuth 仕様に違反しています。callback_url はOPTIONAL パラメータとして指定されています。
しかし、衒学的なことはさておき、おそらく、ユーザーが完了したときにコールバックを取得して、リクエスト トークンをアクセス トークンと交換できることを確認したいと思うでしょう。Yahoo の FireEagle 開発者ドキュメントには、これを行う方法に関する優れた情報がたくさんあります。
2 番目のケースでも、実際にはコールバック URL がインターネットから見える必要はまったくありません。OAuth サービス プロバイダーは、ユーザーがユーザー名/パスワードを提供するために使用するブラウザーをコールバック URL にリダイレクトします。
これを行う一般的な方法は次の 2 つです。
- アプリケーション内から、完了コールバックのために何らかのポート ( http://localhost:1234/など) をリッスンするダム Web サービスを作成するか、または
- プロトコル ハンドラーを登録します (そのようなことを行う方法については、OS のドキュメントを確認する必要がありますが、<a href="skype:555-1212"> のようなことが可能になります)。
(あなたがここに住んでいると私が信じているフローの例です。)
*nix スタイルのシステムを使用している場合は、次のようなエイリアスを作成します127.0.0.1 mywebsite.dev
(/etc/hosts
上記のような行がファイルに含まれている必要がありますhttp://website.dev/callbackurl/for/app
。コールバック URL で使用し、ローカル テスト中に使用します。
これは Facebook OAuth を使用したもので、サイト URL とコールバック URL として「http://127.0.0.1:8080」を実際に指定できました。Facebook アプリへの変更が反映されるまで数分かかりましたが、その後は機能しました。
これはあなたを助けるかもしれません:
http://www.marcworrell.com/article-2990-en.html
これはphpなので、開発サーバーでのセットアップは非常に簡単です。
私はこれを一度試しました:
とてもシンプルです。下部にコードをダウンロードするためのリンクがあります。
localtunnel [ポート] と出来上がり
http://blogrium.wordpress.com/2010/05/11/make-a-local-web-server-public-with-localtunnel/
2 つのアプリケーションを作成できますか? 1 つは展開用、もう 1 つはテスト用です。
または、リクエスト トークンをリクエストするときに oauth_callback パラメータを含めることもできます。oauth_callback で指定された URL にリダイレクトするプロバイダー (Twitter、Google など) もありますが、このコールバック URL を無視して、構成時に指定された URL にリダイレクトするプロバイダー (Yahoo など) もあります。
したがって、この問題を (BitBucket の OAuth インターフェイスを使用して) 解決した方法は、localhost へのコールバック URL (または実際に必要なもの) を指定し、curl で認証 URL をたどることでしたが、HTTP ヘッダーのみを返すというねじれがありました。例:
curl --user BitbucketUsername:BitbucketPassword -sL -w "%{http_code} %{url_effective}\\n" "AUTH_URL" -o /dev/null
資格情報と認証 URL を挿入します (感嘆符をエスケープすることを忘れないでください!)。
あなたが得るべきものは次のようなものです:
200 http://localhost?dump&oauth_verifier=OATH_VERIFIER&oauth_token=OATH_TOKEN
そして、これから oath_verifier をスクレイピングできます。
Pythonで同じことをする:
import pycurl
devnull = open('/dev/null', 'w')
c = pycurl.Curl()
c.setopt(pycurl.WRITEFUNCTION, devnull.write)
c.setopt(c.USERPWD, "BBUSERNAME:BBPASSWORD")
c.setopt(pycurl.URL, authorize_url)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.perform()
print c.getinfo(pycurl.HTTP_CODE), c.getinfo(pycurl.EFFECTIVE_URL)
これが誰かに役立つことを願っています!