サポートされているフローが HTTP リダイレクトのみの場合、OAuth アクセス トークンを取得するポータブルな方法は何ですか? たとえば、RunKeeper APIへのアクセスをモバイル アプリに許可したいと考えています。
- アプリはアドレスでブラウザを開きます
https://runkeeper.com/apps/authorize?client_id=...&response_type=code&redirect_uri=MY_OWN_REDIRECT_URL
- ユーザーがクリックしてアクセスを許可すると、次の URL にリダイレクトされます
MY_OWN_REDIRECT_URL?code=ONE_TIME_AUTH_CODE
- ???
https://runkeeper.com/apps/token
アプリは、ステップ 2 のワンタイム認証コードとクライアント シークレットを使用して、POST 要求で実際のアクセス トークンを要求します。
API は OAuth デバイス プロファイルをサポートしていません (ユーザーは手動でアプリに戻り、数桁のコードを入力します)。この場合、特にユーザーをすぐにアプリに戻したいので、どのようなオプションがあるかを考えています。
オプション1
アプリ内ブラウザーと組み合わせたモバイルアプリの組み込み Web サーバーになるため、OAuth リダイレクト URL を提供し、http://localhost:XYZW
到着したときにワンタイム認証コードをキャッチできます。しかし、それが一般的なモバイル プラットフォームで動作するかどうかはわかりません (現時点では Android/iOS、これらのプラットフォーム用の Mongoose Web サーバーのポートを見つけました)。
オプション 2
のようなカスタム URI スキームを登録しmyapp-oauth-scheme://
ます。RunKeeper の場合、このようなカスタム スキームにリダイレクトできるようです。そして、少なくとも Android/iOS ではアプリを再開できると思いますよね?! WP8 / BB10 などの他のプラットフォームはどうですか?
オプション 3
これは、本当に必要な場合にのみ取りたい道です。OAuth リダイレクト URL として使用され、着信するワンタイム認証コードを保存する非常に最小限の Web サービスをホストします。ユーザーがリダイレクトされると、最終的に「今すぐアプリに切り替えてください」というページが表示されるだけで、アプリは以前に受け取ったワンタイム認証コードを Web サービスに要求します。
結局のところ、より良いオプションはありますか? また、提示されたオプションのどれが Android/iOS およびおそらく他のプラットフォームで正常に動作するか知っていますか?
ところで、私は HTML ベースのアプリ (PhoneGap) を持っているので、外部ブラウザーを使用する必要さえありません。