我已经发布了一个用于处理GAE/Go中Firebase Service Account功能的库
关于GAE/Fire
@eaglesakura 是我。
我在GitHub上发布了一个进行认证和其他相关功能的库GAE/Fire,这是我之前在文章中提到过的。
機能一覽和使用方法如README所述,主要前提是與Firebase自訂認證和手機應用程式整合使用。
通过使用GAE/Fire,可以获得以下优点:
-
- クライアント(Android等)のAuth Token管理をFirebase SDKに行わせることができる
-
- サーバー(GAE/Go)が独自にAuth関連機能を持つ必要がない
-
- FirebaseのユーザーIDを任意の文字列にできる(Firebase Custom Tokenを使用した場合)
- Firebase DatabaseやStorageに任意のRuleデータを追加できる(Firebase Custom Tokenを使用した場合)
已实施功能清单
Json Web Token(JWT) 管理
Firebase Custom Authentication のためのToken Generate / Verify(カスタマイズしたclaim情報に対応)
Firebaseが発行したTokenのVerify
Google Id Token のVerify
OAuth2 Token管理
Service Account権限を持ったOAuth2 Token Generate / Refresh / Verify
Google Play Service(Android)にて発行された access_code からOAuth2 TokenのGenerate / Refresh / Verify
MemcacheによるToken Cache
Cloud Endpoints 2.0相当の認証サポート
Service Control API を経由した Google Cloud Console API Key のVerify
Authorization HeaderのVerify / Google Cloud Endpoints 2.0互換 X-Endpoint-API-UserInfo Header Generate
swagger.json に基づいたOAuth2 audience verify
swagger.json に基づいたGoogle Id Token audience verify
TODO: swagger.json に基づいたPath単位での認証ON/OFF
关于 Cloud Endpoints 2.0 的认证
最近,Cloud Endpoints 2.0已经加入了GAE/J和Flex Environment。除了具备高性能的日志功能外,它还提供了认证方面的支持。
根据上一篇文章的说明,在使用JWT或OAuth2进行认证时,需要进行一些必要的检查,例如aud和iss等。然而,在Cloud Endpoints 2.0中,基于nginx的代理或由Google提供的框架部分会代替我们完成所有这些任务。
此外,还提供了通过GCP控制台生成的API Key进行验证的功能。
在撰写本文时,Cloud Endpoints 2.0尚未提供给GAE/Go标准环境。但由于认证方面可以通过REST API进行再现,因此在GAE/Fire中提供了验证身份信息的功能。
GAE/Fire支持的身份验证格式如下所示。
由于需要检查aud和iss等数据,因此将由第三方生成的Token视为错误处理。
-
- Authorization: Bearer {google-id-token(Google sign-in)}
-
- Authorization: Bearer {firebase-auth-json-web-token(Firebase SDK)}
-
- Authorization: Bearer {json-web-token(GAE/Fire)}
-
- Authorization: Bearer {google-oauth2-token}
- API Key(query|header)
用例
我设想了以下认证令牌的流程。Firebase-Auth等所使用的json-web-token在其头部中包含了用户信息,因此无需访问Datastore等数据库,便可以以较低成本进行用户验证。
-
- 初回ログイン時
Google Sign-In SDKによってGoogle Id Tokenを取得する
サーバー側でユーザーのリソースにアクセスする場合は、上記に加えてサーバー用のAccessCodeも要求する
取得したGoogleIdTokenとAccessCodeをサーバーに送信する
curl -H “Authorization: Bearer {google-id-token}” https://example.com/token?accessCode={AccessCode}
GAE/FireでAuthorizationヘッダを検証し、問題なければ生成したFirebase Custom Auth用のトークンを返却する
必要であればユーザーのOAuth2トークンも取得して、RefreshTokenをDatastoreに保存する
トークンを用いてFirebaseにログインする
認証以後の通信
FirebaseからgetToken()相当のメソッドで通信トークンを得る
通信トークンを用いてAPIを叩く
curl -H “Authorization: Bearer {firebase-token}” https://example.com/users/me
GAE/FireでAuthorizationヘッダを検証し、問題なければ処理を継続する
最后
如果有任何故障或问题,请写下问题以便解决,谢谢。