2016-07-19 9 views
20

私はSignInManagerクラスを調べています。しかし、MSDNに記載されている情報は無用です。それは提供されるメソッドとプロパティが何であるかだけを示します。SignInManager、それは何ですか、どのように、いつ使用するのですか?

私が探しているのは、

1)SignInManagerとは何ですか? 2)使い方は? 3)自分のデータベースに資格情報(ユーザー名とパスワード)が含まれています

サインインマネージャとその使用方法を教えてください。

私は私が持っている私のサンプルプロジェクトで2015年には

public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 

のようなアクションメソッドが含まれています。しかし、私はそれを使用する方法が分からないコントローラを占め、MSDNが完全であるasp.net MVC 5およびVisual Studioを使用していますこれに関する情報を提供することは役に立たない。 SignInManagerが何であるか、何のために何がわからないので、それを詳細に説明する役に立つリンク。

おかげ

答えて

28

免責事項:私はASP.NETのIDに自分自身を使用したモデルで混乱していると私は不正確な場合があり、物事の私の理解で言う(私も明白な事柄を述べかもしれないので、私は謝罪) 。また、私はAsp.Net Coreのアイデンティティーで最近演奏していましたが、これはAsp.Net 4のものとは若干異なっています。アプリケーションクッキーと外部クッキー:

クッキー

ASP.NETのアイデンティティは、クッキーの2種類で動作します。アプリケーションCookieにはアプリケーションのIDが含まれ、ログインマネージャーによって発行されます。外部Cookieには外部認証プロバイダIDが含まれ、認証ミドルウェア(たとえばFacebookAuthenticationMiddlewareなど)によって発行されます。サインインマネージャを使用して外部Cookieを消費し、代わりにアプリケーションCookieを発行します。外部認証を使用しない場合は、外部クッキーを処理しません。

public class SignInManager<TUser, TKey> : IDisposable 
    where TUser : class, IUser<TKey> 
    where TKey : IEquatable<TKey> 

だから、あなたがいる限り、それはIUser<TKey>インタフェースを実装して、ユーザーとして任意のクラスを使用することができます:マネージャで

ログイン

クラスは次のように宣言しました。 IUser<string>を実装している場合は、ゼロから開始する場合はIdentityUserをベースとして使用してください。過去に私はintTKeyとして使用する実装を作成しようとしましたが、かなりの時間を費やして、それを動作させ、進捗状況を見ないようにしようとした後に放棄しようとしました。

パスワードのいずれかのチェックをせずにすぐに指定したユーザーの

SignInManager.SignInAsync方法の問題アプリケーションのクッキーで記号なので、あなたが任意のカスタム認証ロジックを実装する場合、あなたはそれを使用する場合があります(デフォルトのasp.net MVCテンプレートは、それを使用しています登録後すぐに認証する必要はありません)。

SignInManager.PasswordSignInAsyncユーザー名とパスワードが正しいかどうかを確認し、正しい場合はアプリケーションCookieを発行します。

外部看板代わりにあなたのサイト、特にあなたがそれらを認証し、OAuthをとのあなたに認証情報を渡すために、いくつかの外部Webサイトを使用することがありますのためのログイン名とパスワードを作成するには、ユーザーを持ちます。

Asp.NetアイデンティティはUserは...よく、利用者(人)であるUserLogin、という概念を持っている、とLoginUser認証を行うと資格です。 Userに複数のLoginが含まれている可能性があります。

OAuthのフローAsp.NetのWebサイトから見たが(VSテンプレートによって生成されたフローのデフォルトのログに基づいて)次のようになりますよう:

  1. あなたはあなたが外部の認証プロバイダ(認証ミドルウェア)を設定たとえば、Facebook認証を使用するには、Facebookアプリを作成し、そこに返信URLを設定してWebサイトを指し、FacebookAuthenticationMiddlewareにアプリIDとアプリの秘密のFacebookを設定する必要があります。あなたに提供する)。
  2. あなたは、サポートしている外部プロバイダーを選択して、認証されていないユーザーを提示します。
  3. ユーザーが
  4. Webアプリケーションが使用するプロバイダの名前を(これは通常AccountController.ExternalLoginで起こる)を含むChallengeResult発行選択はあなたAsp.Net Webアプリケーションに送信され、プロバイダを選ぶ、戻りURLを呼び出すように設定されていますAccountController.ExternalLoginCallbackとなり、実際のリターンURLのユーザーは後で保存されます。
  5. 適切なミドルウェアはChallengeResultオブジェクトをキャッチし、ユーザーのブラウザがユーザーに資格情報を要求するサードパーティのWebサイトに移動するHTTPリダイレクト応答に変換します。
  6. 認証が成功すると、第3部のWebサイトはユーザーをWebサイトにリダイレクトし、認証ミドルウェア(Facebookの場合は/signin-facebook IIRC)によって作成された特定のURLにリダイレクトされます。
  7. 認証ミドルウェアがこの呼び出しを傍受し、サードパーティのWebサイトから渡されたデータを検証します。すべてがOKの場合はが外部クッキーを発行し、手順4で返されたURL(AccountController.ExternalLoginCallback)にリダイレクトします。
  8. AccountController.ExternalLoginCallbackには、外部のCookieを消費し、代わりにアプリケーションのCookieを発行することが予想されます。それはSignInManager.ExternalSignInAsyncのことです:ログイン情報を与えれば、それはLoginのユーザーを見つけることを試みます。見つかった場合は、アプリケーションCookieを発行します。あなたが未知のLoginを受け取ったときにあなたが正しいと思うものを実行する必要があります(通常、この時点で新しいユーザーを作成します)。VSテンプレートのデフォルトの実装では、この時点で追加情報を求めて、AccountController.ExternalLoginConfirmation )。そのユーザは、ステップ4

カスタムストレージの「後のために保存」実際の戻りURL

にリダイレクトされた後、私はAsp.Netアイデンティティのための独自のストレージを作成して、これまで成功してきました。これは、一般的にはUserManager<TUser, TKey>を降順に独自のユーザーマネージャクラスを実装し、IUserStore<TUser, TKey>,IUserRoleStore<TUser, TKey>などの束のインターフェイスを実装するストレージクラスを実装します。

+0

非常に良い答えです。外部サインインの手順8については、Web APIでもsigninmanagerを使用する必要がありますか? –

+0

'SignInManager'は、外部/アプリケーションCookie、パスワード検証、2FAを扱うヘルパークラスです。どのようなものがWeb APIに役立つかは不明です。 – n0rd

+1

非常に明確で有用です。明白さえもしばしば明確に提示する必要があります。ありがとうございました! –

関連する問題