はじめに
この記事で紹介するもの
Postmanの設定
GoogleAPIの認証設定
この記事で紹介しないもの
Firebaseプロジェクトの作成
アプリ側プッシュ通知の受信設定
背景
以前のFCM HTTP API
サーバーキーを使い回したプロトコル。
→ サーバーキーが漏洩した場合、キーを変えない限り悪用され続ける。
これからのHTTP v1 API
OAuth2 セキュリティ モデルに準じたよりセキュアなプロトコル。
→ アクセストークンが漏洩した場合、悪用される時間は1時間程度。
FCM HTTP APIからHTTP v1 APIに以降した際、以前はサーバーキーを使い回してPostmanでPush通知の確認していましたが、これからはアクセストークンを取得してヘッダーに差し込む作業が必要になりました。
公式にAdmin SDKを利用してアクセストークンを取得する方法サンプルコードが紹介されていました。
サンプルコード(nodejs)
function getAccessToken() {
return new Promise(function(resolve, reject) {
const key = require('../placeholders/service-account.json');
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
);
jwtClient.authorize(function(err, tokens) {
if (err) {
reject(err);
return;
}
resolve(tokens.access_token);
});
});
}
しかし、Push通知のテスト送信をするために言語の導入やソースコードの管理が増えてしまうのは、使い勝手が悪いなと感じました。
本記事は
言語の導入不要!
SDKを使用したサンプルコード不要!
Postmanのみで完結する設定方法の紹介となります。
導入
前提条件
Firebaseプロジェクトが作成済み
サービス アカウント用の秘密鍵ファイルを取得済み
導入の流れ
GoogleAPI OAuth同意画面の作成
Postman Authorizationの設定
1. GoogleAPI OAuth同意画面の作成
まずはOAuth同意画面に遷移します。
Firebaseコンソールより 「プロジェクトの設定」 > 「サービス アカウント」 > 「サービス アカウント権限の管理」
GCPに遷移したらメニューより「APIとサービス」>「OAuth 同意画面」
① OAuth同意画面
User Type「外部」を選択して「作成」
認証済みドメインに「getpostman.com」を追加 > 「保存して次へ」
ちなみに、「ユーザーサポートメール」は後述で出てくる同意画面でアクセス拒否された場合に、「管理者にお問い合わせください(メールアドレス)」の表示で利用されるものになります。
② スコープ
「スコープを追加または削除」
フィルタにFirebase Cloud Messaging API で絞り込む
Firebase Cloud Messaging API にチェックをつける
「更新」
非機密のスコープに追加されたら、「保存して次へ」
③ テストユーザー
Postmanでアクセストークンを取得する際にGCPにログインするユーザーを登録します。(※上限100人)
「ADD USERS」
テスト送信するユーザーのメールアドレスを登録
「追加」
テストユーザーを追加したら「保存して次へ」
④ 概要
「ダッシュボードに戻る」
⑤ 認証情報の取得
Postmanからアクセスする際の認証情報を取得します。
左メニューの認証情報より OAuth2.0 クライアントIDのうち 「Web Client」の編集ボタンを押します。
以下の情報を控えてください。
① クライアントID
② クライアント シークレット
③ 承認済みのリダイレクトURI
2. Postman Authorizationの設定
Postmanを起動し、コレクションの「Authorization」を開きます。
Authorizationの設定
トークン取得時の認証情報を設定します。
Type: OAuth 2.0
Callback URL: ③承認済みのリダイレクトURI
Auth URL: https://accounts.google.com/o/oauth2/auth
Access Token URL: https://oauth2.googleapis.com/token
Client ID: ①クライアントID
Client Secret: ②クライアント シークレット
Scope: https://www.googleapis.com/auth/firebase.messaging ← MESSAGING_SCOPE
アクセストークンの取得
上記の「Get New Access Token」を押します。
すると、Googleのログイン画面がポップアップしますので、前述で登録したテストユーザーでログインします。
権限周りの許可を求めてくるので許可をするとアクセストークンを取得することができます。
Access TokenのAvailable Tokensより「googleapi-oauth2」を選択すると、アクセストークンの反映が完了します。
確認
各リクエストのHeadersを確認すると、既にhidden headerにAuthorization: Bearer ya29...とアクセストークンが反映されていることが確認できます。
無事、Push通知の送信に成功しました。
補足
テストユーザーに追加していないアカウントでログインすると、権限がなくエラーとなります。
この時、前述で登録したユーザーサポートメールに問い合わせる旨のメッセージが表示されます。
終わりに
SDKを使うという手間を省いてみたけれども、テストユーザーの追加というプロセスが増えたので、テスターが変わったらテストユーザーのアカウントを追加するといった管理が新たに発生しました。
使い勝手が良くなったかどうかは...
↧