私はFOSUserBundle、FOSRestBundle、HWIOauthBundleのバックエンドフレームワークとしてSymfony3を使用しています。私はフロントエンドのフレームワークとしてNodeJSと共にAngular2も使用しています。Symfony3の認証されたユーザ(HWIOAuth)からAngular2でJWTトークンを取得
フロントエンドフレームワークは、LexikJWTAuthenticationBundleを使用してバックエンドフレームワークからデータを取得します。目的は、子クラスを持つマスタークラス "AbstractUser" を使用してユーザーを認証することです:
- FacebookUser、GoogleUser、...(OAuth認証用)
- NativeUser(ユーザー/パスワード認証用)
I首尾セットアップ認証メカニズムの一部:
- ユーザー/パスワード認証:私はSymfony3 FRにAngular2フレームワークからのユーザーを認証する必要がありますamework。そのため、Symfony3はヘッダで使用されるトークンを返します。
しかし、私はAngular2フレームワークからのOAuthユーザーを認証しようとすると、私はsymfony3フレームワークにリダイレクトされ、認証プロセスの後、Symfony3は、ユーザーを認証し、それがAngular2フレームワークのページにユーザーを戻します。これは論理のようです。
しかし、問題はAngular2フレームワークが認証されたユーザーを認識しないことです。実際、ユーザーはSymfony3フレームワーク(Angular2ではなく)を使用してOAuthプロバイダを通じて認証されています。私はsymfony3で認証されたユーザのJWTトークンを返す必要がありますページhttp://symfony_framework/get_tokenを呼び出すしようとするとAngular2、でそう、私は見つけることのコード行:
$this->get('security.token_storage')->getToken();
戻り、この結果:
app.INFO: AnonymousToken(user="anon.", authenticated=true, roles="")
私はこのページをhttp://symfony_framework/get_tokenと呼ぶと、私はこのページ(クッキーを使って)で認証されているので、JWTトークンを印刷するが、Angular2はクッキーがない(XHRリクエスト)。
解決策はありますか?可能であれば、私は安全なソリューションが必要です。私はこのアイデアについて考えた:
- 認証後Angular2からSymfony3を使用してのOAuthプロバイダに、symfonyはAngular2ページにユーザーをリダイレクトしようとしたとき、それはまたAngular2フレームワークにJWTトークンを送信します(取得を使用してまたはPostメソッド)を使用して、次回RESTデータを取得します。しかし、どのユーザーも悪意のあるJWTトークンまたはAnglet2フレームワークに偽のJWTトークンを送信する可能性があるため、これが安全かどうかはわかりません。しかし、私はユーザー情報を取得しようとするとSymfony3コントローラでこのトークンを確認できます。しかし、これはすべて安全ですか?私はこのすべてのことで新しく、私は特にユーザーアカウント(Facebook、Google、...)で間違いをしてはいけません。
- キャッシュ内のトークンを共有します(https://stackoverflow.com/a/39467076/8239292)。しかし、これは2つのウェブサイト(Angular2とSymfony3)の間で可能ですか?そしてこれも安全ですか?キャッシュは、トークンのような機密データを保存するためには使用されません。また、有効期限(トークンの妥当性よりも大きい場合)のために多くの問題が発生します。
他に解決策がある場合は、最適な解決策を教えてください。
おかげ
ご返信ありがとうございます。はい、知っています。そして私がした作業の間、私はセッションを使用しませんでした。私はあなたが言ったように、NativeUserユーザーを認証するためにヘッダーにJWTトークンを使用しました(ログイン/パスワード認証)。しかし、他のタイプの認証(OAuth)に関しては、認証プロセス中にToken JWTを使用する方法を見つけられませんでした。確かに私はセッションを使用する必要はありません。 Angular2の匿名ユーザーの状況を説明するために、以前のセッションについて話しました。 OAuthで認証した後、新しいJWTトークンを生成する必要があります。 –
したがって、これらのタイプの認証(OAuthまたはLogin/Password)の両方について、ユーザーはトークンを使用してSymfony3からRESTデータを取得するため、認証のタイプは後では問題ありません –