サンプルで報告された問題を修正するプル リクエストをレビューする必要があり、テストが合格している間に、サンプルで変更が必要な何かがさらに起こっているに違いないと感じました。
JSON Web Token (JWT は「ジョッツ」と発音します) については少し前から知っていましたが、知りません。このPRを見て、もっと掘り下げてみたいと思うきっかけができました。
JWT は、当事者間で情報を安全に送信するためのオープン標準の方法です。これらは、ユーザーを認証し、リソースへのアクセスを承認するためによく使用されます。これらは、ヘッダー、ペイロード、署名の 3 つの部分で構成されます。
IAM サービス アカウント認証情報 API は、IAM サービス アカウントになりすますための有効期間の短い認証情報を作成します。 SignJwtメソッドは、サービスアカウントのシステム管理の秘密キーを使用してJWTに署名します。 SignJwt メソッドのリクエスト本文内のペイロード フィールドには、JWT クレーム セットを含むシリアル化された JSON オブジェクトが含まれている必要があります。
クレームは、JWT が送信するコア情報です。
有効なクレーム セットの例を次に示します:
{ "iss": "https://cloud.google.com/iam", "sub": "projects/-/serviceAccounts/[email protected]", "aud": "https://my-iap-protected-app.example.com", "iat": 1694003600, "exp": 1694007200 }
このクレーム セットには次のフィールドが含まれます:
これらのクレームを JWT のペイロードに含めることで、それが有効であり、IAP で保護されたリソースへのアクセスに使用できることを確認できます。
元のコードは次のようになりました
iat = datetime.datetime.now(tz=datetime.timezone.utc) exp = iat 3600 return json.dumps( { "iss": service_account_email, "sub": service_account_email, "aud": resource_url, "iat": iat, "exp": exp, } )
テストで何か問題があることはわかっていますが、このコードの根本的な問題の解決を妨げたくありません。
PR 作成者が変更を送信しました
iat = datetime.datetime.now(tz=datetime.timezone.utc).timestamp()
これは不完全な修正になるように思えました。 API のドキュメントに基づいて、提出された修正では iat が int 型に設定されず、依然として失敗することがわかりました。 PR の
の問題を解決するためのわずかな変更を提案しました。
now_utc = datetime.datetime.now(tz=datetime.timezone.utc) iat = int(now_utc.timestamp())
考えれば考えるほど、このサンプルでは Datetime は役に立たないことがわかりました。 Datetime モジュールは、日付が必要な場合に役立つ日付と時刻を操作するためのクラスを提供します。文字通り UTC の整数が必要なので、Time モジュールの方が便利です。
挿入してください、これができます
now = int(time.time()) return json.dumps( { "iss": service_account_email, "sub": service_account_email, "aud": resource_url, "iat": now, "exp": now 3600, } )
このサンプルの完全な (更新された!) コードはここで見つけてください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3