🙇♂️
GoでOpen ID Connect(OIDC)を使ってGoogleの認証を利用する
Webアプリ利用時に独自の認証機能ではなくGoogleの認証機能を利用してOpen ID Connectのサンプルを試します。サンプルアプリは以下です。
まずはGoogleのWeb画面から同意画面に表示するアプリ名やリダイレクト先のURLを記載する
ローカルで動かすため以下のように記入する
Authorized JavaScript origins http://127.0.0.1:5556
Authorized redirect URIs http://127.0.0.1:5556/auth/google/callback
認証情報を作成後クライアントIDとシークレットが表示されるので環境変数に定義する
export GOOGLE_OAUTH2_CLIENT_ID=・・・
export GOOGLE_OAUTH2_CLIENT_SECRET=・・・
サンプルアプリを起動する
$ go run example/idtoken/app.go
ブラウザでリクエストを投げる
認証画面
認証が通ったらユーザーの情報を取得できます
{
"OAuth2Token": {
"access_token": "*REDACTED*",
"token_type": "Bearer",
"expiry": "2023-04-01T21:56:59.749715+09:00"
},
"IDTokenClaims": {
・・・
"sub": "ユーザーごとに一意のID",
"email": "kai.kusakari@gmail.com",
"email_verified": true,
"at_hash": "ハッシュ値",
"nonce": "",
"name": "草苅快",
"picture": "https://lh3.googleusercontent.com/a/AGNmyxbCoxz43_Pq5JLtkMPj7sL4Iun8cDOx2s8yvi6N=s96-c",
"given_name": "快",
"family_name": "草苅",
・・・
}
}
レスポンスを受け取り、subの値をDBに登録しておくことで次回以降このユーザーが再度ログインしてきた際にはsubの文字列が登録済みかどうか?確認することで新規ユーザーの初回ログインなのか、既存ユーザーの再ログインなのか?判断します。 WebアプリであればアクセストークンをHTTPヘッダに使うのはリスクもあるので、OIDCでは認証のみ確認して、以降のセッションは個別にCookieを発行して独自管理するのが一番良いと感じています。
Discussion