3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CustomToken認証を行う際IAMが絡んでくるケースとその対応

Last updated at Posted at 2019-11-01

この記事について

Firebase/AuthenticationでCustomToken認証を行う場合
Tokenの作成方法は大きく3つありそれぞれの作成方法のメリデメ(感じてることベース)や
Admin SDK にサービス アカウントを検出させる方法を使用する場合IAMの設定が必要になり実際対応した時に出会したエラーや感じたことを記事にさせていただきました。

CustomToken認証を使用するケース

Authenticationではメール/パスワード,SMSと言った頻繁に使われてそうなログイン方法や
Facebbook,Twitterなどのソーシャルログインを簡単に実装することができます。

がしかし、
InstagramのようにAuthenticationのログイン方法に用意されていない場合はどうしましょうか?

答えは、
カスタム認証を使用することです。
Instagram で Firebase ユーザーを認証する

スクリーンショット 2019-11-01 16.17.45.png 大まかなやりとりはこんな感じなのかな〜と言った具合の図です:sweat_smile:

CustomTokenを作成する方法

CustomTokenは署名付きのJWT(Json Web Token)です。
CustomTokenの署名に使用される秘密鍵はGoogleServiceAccountに属しており
Firebase Admin SDKがCustomTokenの署名に使用するGoogleServiceAccountは大きく3つの方法で指定することができます。

ServiceAccountJSONファイルを使用する

スクリーンショット 2019-11-01 16.27.26(2).png
ServiceAccountJsonファイルはFirebaseConsole>Settings>全般よりダウンロードできます。

const serviceAccount = require('service-account.json')
admin.initializeApp({
	credential: admin.credential.cert(serviceAccount)
})

メリット
・ダウンロードして読み込ませるだけなので設定が楽
デメリット
・管理はしっかり(うっかりするとサービスアカウントに関連する情報がみられる)
・Prod, Stg, Devなど複数環境必要とする場合読み込むJsonファイル指定やらの設定が必要(<-めんどい)

サービス アカウント ID を使用する

admin.initializeApp({
    serviceAccountId: 'your_project_id'
})

メリット
・ProjectIdを指定するだけなので設定が楽
デメリット
・Prod, Stg, Devなど複数環境必要とする場合読み込むJsonファイル指定やらの設定が必要(<-めんどい)

Admin SDK にサービス アカウントを検出させる

Cloud FunctionsなどGoogleが管理する環境にデプロイされている場合
Firebase Admin SDKがローカルのメタデータサーバーよりServiceAccountIdを自動検出しIAMサービスと併用することでリモートでトークンに署名することが可能

admin.initializeApp()

メリット
・Prod, Stg, Devなど複数環境対応が楽(<- 環境が増えるごとにコードを追加する手間からの脱却)
デメリット
・IAMの設定やらのエラーで最初困る(<- この記事を見ればきっと解決w)

Admin SDK にサービス アカウントを検出させる時のエラー対応

Error: Identity and Access Management (IAM) API has not been used in project {projectId} before or it is disabled...(省略)

Enable it by visiting {url}

IAM APIを有効にする必要があります。

Errorの中にこのurlにアクセスしてIAM APIの設定をみてくださいな文が含まれてるので
IAM APIの設定を有効にしましょう
スクリーンショット 2019-11-01 16.01.50(2).png

Error: Permission iam.serviceAccounts.signBlob is required to perform this operation on service account projects/-/serviceAccounts/{project_name}@appspot.gserviceaccount.com

IAM APIを有効にしただけではまだ終わりません。
*{project_name}@appspot.gserviceaccount.com*にサービス アカウント トークン作成者の役割を付与する必要があります。

こちらはGCPConsoleで役割を付与してください
スクリーンショット 2019-11-01 16.04.00(2).png

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?