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クライアントのシークレットを指します。