SignInManagerクラスを調査しています。しかし、MSDNで提供される情報は非常に役に立ちません。提供されるメソッドとプロパティが何であるかのみを示します。
私が探しているのは
1)SignInManagerとは何ですか? 2)使用方法3)そして、資格情報に関連する情報(ユーザー名とパスワード)を含む独自のデータベースを持っています
ユーザー認証にカスタムデータベースが使用されるようにSignInmanagerを使用するにはどうすればよいですか?
私はasp.net MVC 5とVisual Studio 2015を使用しています。サンプルプロジェクトには、次のようなアクションメソッドを含むアカウントコントローラーがあります。
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
しかし、私はそれを使用する方法がわかりません、MSDNはこれに関する情報を提供するために完全に役に立たないです。 SignInManagerが何であり、何のためにあるのかわからないので、詳細に説明する役立つリンク。
ありがとう
免責事項:ASP.NET IDで使用されているモデルに戸惑っていますが、不正確である可能性があることを理解していると言います(明らかなことを述べているかもしれませんので、おaび申し上げます)。また、最近Asp.Net CoreのIDで遊んでいましたが、これはAsp.Net 4で利用できるものとは少し異なります。
ASP.NET IDは、アプリケーションCookieと外部Cookieの2種類のCookieで動作します。アプリケーションCookieにはアプリケーションのIDが含まれ、サインインマネージャーによって発行されます。外部Cookieには外部認証プロバイダーIDが含まれ、認証ミドルウェア(たとえば、FacebookAuthenticationMiddleware
など)によって発行されます。サインインマネージャーを使用して、外部Cookieを消費し、代わりにアプリケーションCookieを発行します。外部認証を使用しない場合、外部Cookieを処理しません。
次のように宣言されたクラス:
public class SignInManager<TUser, TKey> : IDisposable
where TUser : class, IUser<TKey>
where TKey : IEquatable<TKey>
したがって、IUser<TKey>
インターフェイスを実装している限り、ユーザーとして任意のクラスを使用できます。または、IUser<string>
を実装するゼロから始める場合は、IdentityUser
をベースとして使用します。過去にint
をTKey
として使用する実装を作成しようとしましたが、動作させるためにかなりの時間を費やし、進捗が見られなかったため、試みを放棄しました。
SignInManager.SignInAsync
メソッドは、チェックなしで指定されたユーザーのアプリケーションCookieをすぐに発行するため、カスタム認証ロジックを実装する場合は、それを使用することができます(デフォルトのasp.net MVCテンプレートは、ユーザー登録後に使用します。登録直後に認証する必要があります)。
SignInManager.PasswordSignInAsync
指定されたユーザー名とパスワードは有効性をチェックし、正しい場合はアプリケーションCookieを発行します。
ユーザーにサイトのログインとパスワードを特別に作成させる代わりに、外部のWebサイトを使用して、OAuthで認証情報を認証して渡すようにしたい場合があります。
Asp.Net IdentityにはUser
とLogin
の概念があります。ここで、User
は...(ユーザー(人)、Login
は資格情報です) User
で認証します。 User
には複数のLogin
sがある場合があります。
Asp.Net Webサイトから見たOAuthフローは次のようになります(VSテンプレートによって生成されたデフォルトのログインフローに基づきます)。
FacebookAuthenticationMiddleware
を構成します。ChallengeResult
を発行し(これは通常AccountController.ExternalLogin
で発生します)、戻りURLはAccountController.ExternalLoginCallback
を呼び出すように設定され、実際の戻りURLユーザーは終了するはずですinは後で使用するために保存されます。ChallengeResult
オブジェクトをキャッチし、それをHTTPリダイレクト応答に変換します。これにより、ユーザーのブラウザーは、ユーザーに資格情報を要求するサードパーティのWebサイトに移動します。/signin-facebook
IIRC)。AccountController.ExternalLoginCallback
)。AccountController.ExternalLoginCallback
では、外部Cookieを消費し、代わりにアプリケーションCookieを発行することが期待されています。それがSignInManager.ExternalSignInAsync
が行うことです。ログイン情報が与えられると、Login
を持つユーザーを見つけようとします。見つかった場合、アプリケーションCookieを発行します。そうでない場合は通知され、未知のLogin
を受け取ったときに正しいと思うことを行う必要があります(通常、この時点で新しいユーザーを作成します。VSテンプレートからのデフォルト実装はこの時点で追加情報を要求しますAccountController.ExternalLoginConfirmation
)にユーザーを作成します。そのユーザーは、手順4で「後で保存する」実際のリターンURLにリダイレクトされます。これまで、Asp.Net Identityのカスタムストレージの作成に失敗しました。一般に、UserManager<TUser, TKey>
を継承する独自のユーザーマネージャークラスの実装と、IUserStore<TUser, TKey>
、IUserRoleStore<TUser, TKey>
などの一連のインターフェイスを実装するストレージクラスの実装が含まれます。