Google ログインがシークレット モードで機能しない 質問する

Google ログインがシークレット モードで機能しない 質問する

私はAngular 9プロジェクトでGoogleサインインを使用しました。Googleサインインjs APIを使用しています。エラーが発生します現在の環境ではCookieが有効になっていませんGoogle Chrome シークレット モードでは、通常の Google Chrome タブでは正常に動作します。以下はエラーの詳細です。

details: "Cookies are not enabled in current environment."
error: "idpiframe_initialization_failed"

シークレット モードでは、デフォルトでサードパーティの Cookie が無効になっていることは理解していますが、これに対する解決策は何ですか? Google サインインを使用している他のサイトは、Google Chrome シークレット モードで完全に動作していることがわかりました。

ベストアンサー1

Angular はブラウザ内の JavaScript にすぎません。そのため、Angular アプリをロードするユーザーには、サーバーから大量の JavaScript が提供されます。そのサーバーが Google API による認証を処理する場合、ユーザーはサーバーとのみやり取りします (ただし、Google にサインインするためのリダイレクトはあります)。

この認証フローではサードパーティの Cookie は必要ありません。

しかし!認証がユーザーのブラウザで直接処理される場合、サードパーティの Cookie が無効になっていると (シークレット モードになっているため)、アプリは動作しません。

たとえば、Github ページ経由で提供する Angular アプリがあります。Github はアプリを提供しますが、それ以外は何も行いません。ユーザーの GDrive にドキュメントを作成する必要があるため、認証とリソースへのアクセスはすべて JavaScript クライアント内から行います。これを安全に動作させるには、アプリのユーザーがサードパーティの Cookie を許可する必要があります。これを回避する方法はありません。

アプリにバックエンドがあれば、ユーザーはサーバーに Google ドライブへのアクセス許可を与えることができ、サードパーティの Cookie は必要ありません。その時点では、ユーザーの GDrive にアクセスするのはフロントエンドの JavaScript クライアント (Angular アプリ) ではなく、私のサーバーです。

バックエンドを使用すると、異なる、一般的にはより安全な認証フローが可能になります。ただし、ユーザーにとっては、ユーザー エクスペリエンスは同じです。このため、状況によっては、ユーザーはサードパーティの Cookie を許可する必要がありますが、他の状況では許可する必要はありません。

一般的に、ユーザーのシステムやブラウザが安全であると信頼するよりも、サーバを安全に保護する方がはるかに効果的です。セキュリティが懸念事項である場合は、ブラウザ内からではなく、サーバから API 呼び出しを行う必要があります。そうすれば、問題も解決されるはずです。

おすすめ記事