0

この質問は、ServiceStack OAuth 認証フローに関連しています。FacebookAuthProvider をデバッグすると、コードパラメータが null でない場合 (Facebook ダイアログ URL へのリダイレクトから取得)、それを使用してアクセス トークンを取得することがわかります。AuthProvider は、OAuthAuthorizer と同じことを行います。

Javascript SDK を使用して、単一ページ アプリケーションのアクセス トークン (ポップアップ内のモーダルを使用し、リダイレクトなし) を取得するのはどうですか。発行されたアクセス トークンでユーザーを認証するためのエンドポイントはありますか?

また、これはセキュリティ上の欠陥だと思いますか? ユーザーが最初に資格情報プロバイダーで署名し、次に OAuth プロバイダーで署名すると、ServiceStack は 2 つの別々のアカウントを作成すると思います。サーバーが Facebook API を使用してアクセス トークンを検証し、有効な応答を返す場合、アプリケーションで既存のユーザーに署名しても問題ないと思います (プロバイダーがfacebookに等しいAuthUserDetails を探すだけで十分に信頼できるはずです)。

4

1 に答える 1

1

これFacebookAuthProviderは、他のすべての OAuth プロバイダーが従うのと同じ OAuth プロバイダー フローに従います。このフローは、AuthProvider がユーザーの access_token を取得するために使用するコードでリダイレクトする前に、リモート OAuth サイトにリダイレクトしてユーザーの承認を取得します。組み込みの AuthProvider は、どの JavaScript SDK にも依存していません。

ServiceStack は 2 つの個別のユーザー アカウントを作成しません。認証中に認証した各 AuthProvider にリンクされる 1 つのユーザー アカウントを作成します。その後、ユーザーは、以前に認証した認証プロバイダーのいずれかを使用して認証し、アカウントにサインインできます。

ユーザーが Facebook で認証されたときにまだ認証されていない場合にのみ、別のユーザー アカウントが作成されます。ただし、同じ電子メールで登録された既存の UserAccount がない場合にのみ、新しいアカウントが作成されます。それ以外の場合は、EmailAlreadyExistsエラーで失敗します。別々のユーザー アカウントが作成された場合、これらはリンクされていない (つまり、異なる UserAuthId を持つ) 2 つの別々のアカウントとして扱われます。この場合、いずれかの認証プロバイダーを使用して認証すると、2 つの異なるユーザー アカウントにサインインすることになります。

于 2016-03-01T04:57:24.713 に答える