2

GoogleOAUTH2が実装され機能しているRailsWebサイトがあります。

私たちはiOSアプリを開発しています。このアプリは、APIを使用して私のWebサーバーと通信します。一部のAPIでは、ユーザーを認証する必要があります。iOSアプリは、デバイスでOAUTH2を使用してユーザーを認証し、SSLを介してデバイスからWebにトークンを認証としてPOSTするという考え方です。トークンを確認するためのWebサイトが必要です。

Google APIコンソールで、iPhoneデバイスのクライアントIDを追加し、次の場所に移動してアクセストークンを取得しました。

https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
response_type=code&
client_id={my client id}

次に、トークンを自分のサイトに渡します。私のサイトでは、次の方法でトークンを検証します。

google = OmniAuth::Strategies::GoogleOauth2.new(ENV['GOOGLE_API_KEY'],['GOOGLE_CLIENT_API_SECRET'])
client = OAuth2::Client.new(ENV['GOOGLE_API_KEY'],['GOOGLE_CLIENT_API_SECRET'], google.options.client_options)
access_token = OAuth2::AccessToken.new(client, params[:token], google.options.access_token_options || {})
google.access_token = access_token
google.auth_hash

しようとするauth_hashと、次のエラーが返されます。

 {
  "error": {
   "errors": [
    {
     "domain": "global",
     "reason": "authError",
     "message": "Invalid Credentials",
     "locationType": "header",
     "location": "Authorization"
    }
   ],
   "code": 401,
   "message": "Invalid Credentials"
  }
 }

ここから、無効なクレデンシャルを指定した理由がわかりません。

ENV['GOOGLE_API_KEY']Webサイトと同じAPIキーをENV['GOOGLE_CLIENT_API_SECRET']指し、iOSクライアントのシークレットを指します。

4

1 に答える 1

2

私が上で使用したURLは、私に与えたと思いましたaccess token。実際には、それは私に返されますauthorization code(これを使用してを取得できますaccess token)。

authorization code解決策は、をと交換access tokenすることです。そうすれば、トークンを渡して使用できます。

authorization codeとの違いはGoogleサイトではやや曖昧ですが、それらを交換する方法については、 httpsaccess token://developers.google.com/accounts/docs/OAuth2WebServerで読むことができます 。

于 2012-08-13T02:32:06.087 に答える