🐬

【Ruby】GoogleのOAuth2.0認証で、認可コードを元にプロファイル情報を取得する

2022/08/30に公開

概要

以前に【Google API】GoogleCredentialを使用せず認可コードからcredentialの情報を取得(Java/Kotlin)の記事で、KotlinでGoogleのOAuth2.0を認可コードを受け取って認証する実装を紹介しました。
今回Rubyで実装してみます、認可コードを元にプロファイル情報を取得するところを紹介します。

前提

前提条件は前の記事と同様に、認可コードはフロントエンドから送られてくるものとします。また、GCPの設定画面にて、Google OAuth2.0のクライアントIDとシークレットを、事前に取得済みの前提とします。

対応

  • 認可コードの検証にはgoogleapis/google-auth-library-rubyのライブラリを使用します。実装にあたっては、こちらのサンプルを参考にしています。
  • プロファイル情報の取得には、google-apis-oauth2_v2のライブラリを使用します。実装にあたっては、こちらのissueの内容を参考にしています。

実装

require 'googleauth'
require 'google/apis/oauth2_v2'

# 認証用のサービス
class AuthService
  @scopes = %w[email profile openid]
  # GoogleのOauthクライアント設定画面からダウンロードする認証用のjson
  @client_id = Google::Auth::ClientId.from_file(ENV.fetch('GOOGLE_AUTH_SECRETS_FILE_PATH'))

  # googleの認可コードによる認証(認可コードが引数)
  def self.auth_by_google_auth_code(auth_code)
    authorizer = Google::Auth::UserAuthorizer.new(
      @client_id,
      @scopes,
      nil, # 認証情報を特に記録しないのでnil
      ENV.fetch('GOOGLE_AUTH_APPROVED_URL') # GoogleのOauthクライアント設定画面の承認済みのJavaScript生成元で許可したURL
    )
    credentials = authorizer.get_credentials_from_code(code: auth_code)
    # プロフィールの取得
    oauth = Google::Apis::Oauth2V2::Oauth2Service.new.tap do |service|
      service.authorization = credentials
    end
    user_info = oauth.get_userinfo_v2
    # ユーザ名を出力
    puts(user_info.name)
  end

end

Discussion