我已经发布了一个用于处理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ヘッダを検証し、問題なければ処理を継続する

最后

如果有任何故障或问题,请写下问题以便解决,谢谢。

广告
将在 10 秒后关闭
bannerAds