12

サーバー側のウェブフローを使用して、ユーザーがOauth2経由でGoogleAPIを承認する必要があるiOSアプリを構築しています。現在、UIWebViewを開いてoauth2フローを開始しています。

http://localhostリダイレクトURIをローカルマシンに設定し、サーバーをローカルマシンで実行しているため、これはシミュレーターで正常に機能します。

ただし、デスクトップで実行されているサーバーに接続したまま、デバイスでテストしたいと思います。これを行うためhttp://foo.local.に、サーバーに接続するためのデスクトップアドレス(ローカルサブネットIPまたはbonjourアドレスなど)を検出するアプリを入手しました。ただし、Google Oauth2フローは、ローカルURIをリダイレクトURLとして使用できないと言っています。

これを回避する方法はありますか?可能であれば、ローカルネットワークのセットアップやIOSデバイスからのプロキシ要求をいじる必要はありません。理想的には、bonjourサービスを使用してサーバーを検出できるようにしたいと思います。これは、開発者のチームがあり、アプリを使用して、接続するローカルネットワーク上のサーバーを選択できるためです。

オプション?

4

3 に答える 3

2

2013年3月19日更新

サーバーが仲介者でなければならない場合、私はドメイン名を取得してサーバーを公開するのが最も簡単な方法だと思います。www.godaddy.comまたは任意のドメイン名プロバイダーは、年間約15ドルでドメイン名を取得します(割引がある場合はそれより低くなります)。

その後、ダイナミックDNSを取得する方法を検索し、選択したドメイン名としてredirect_uriを設定します。

それ以外の場合、oauthの目的でのみ、サーバーの役割がここで果たしていることはわかりませんでした。以下にリストされている2番目の方法として、デバイスは、厳重に防御された防火壁の背後にある場合でも、Googleサーバーと直接通信できます。(トークンはタイトルバーを投げて渡されます)。

したがって、ここでいくつかの明確化が必要になる場合があります。

ローカルホストサーバーは、GoogleドライブからファイルをキャッシュしてiOSデバイスに再配布するためのハブのように機能しますか?または、ここでどのようなネットワークアーキテクチャを実現したいですか?

==

2013年3月18日更新

公式文書によると https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi

oauthには2つの方法があります。localhostをリダイレクトとして使用するのは1つの方法にすぎません。

もう1つは、この文字列を使用することです

urn:ietf:wg:oauth:2.0:oob

ローカルホストがあるリクエストを置き換えます。

たとえば、ローカルホストがの前のリクエスト(注:違いは'redirect_uri ='で始まる中央の行にあります)

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&
redirect_uri=http://localhost:9004&
response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

今に変更することができます

    https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com

したがって、シミュレータで前者のURLにアクセスすることは、実際のデバイスで後者にアクセスすることと同じである必要があります。

ハロー

于 2013-03-16T12:31:32.627 に答える
0

このアプローチを試していただけますか?/etc/hostsMacOSXのファイルに以下を追加します-

192.168.33.100   trialapp  trialapp.com #put your local IP address instead of 192.168.33.100

新しいクライアントID用に設定されたGoogleAPIコンソールに移動し、リダイレクトURLを次のように変更しますhttp://trialapp.com/

  • 「アプリケーションタイプ:Webアプリケーション」。
  • 「サイトまたはホスト名(その他のオプション)」経由:

私たちが行っているのは、ローカルサブネットのIPアドレスをエイリアスドメイン名にマッピングすることです。したがって、Googleはこれがローカルアドレスであるともはや考えるべきではありません。これが機能するかどうかを確認しますか?

于 2013-03-18T12:23:17.557 に答える
0

私は次のアプローチをとることによってこれを解決することになりました。

UIWebViewで、すべての読み込みリクエストをインターセプトし、URLを変更しました。基本的に、redirect_uriをパブリック(APIコンソールにも登録されている)に設定しますが、UIWebViewがそのリダイレクトURIを(いくつかのリダイレクト後に)ロードしようとすると、代わりにそのURLを書き換えて、Mac上のコールバックを指すようにします。ローカルネットワーク。

明らかに、サーバー側でトークンを解析するときは、これを考慮する必要があります。

于 2013-03-19T14:20:45.640 に答える