🐬
【Ruby】GoogleのOAuth2.0認証で、認可コードを元にプロファイル情報を取得する
概要
以前に【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