免責事項:私は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
をベースとして使用してください。過去に私はint
をTKey
として使用する実装を作成しようとしましたが、かなりの時間を費やして、それを動作させ、進捗状況を見ないようにしようとした後に放棄しようとしました。
パスワードのいずれかのチェックをせずにすぐに指定したユーザーの
SignInManager.SignInAsync
方法の問題アプリケーションのクッキーで記号なので、あなたが任意のカスタム認証ロジックを実装する場合、あなたはそれを使用する場合があります(デフォルトのasp.net MVCテンプレートは、それを使用しています登録後すぐに認証する必要はありません)。
SignInManager.PasswordSignInAsync
ユーザー名とパスワードが正しいかどうかを確認し、正しい場合はアプリケーションCookieを発行します。
で
外部看板代わりにあなたのサイト、特にあなたがそれらを認証し、OAuthをとのあなたに認証情報を渡すために、いくつかの外部Webサイトを使用することがありますのためのログイン名とパスワードを作成するには、ユーザーを持ちます。
Asp.NetアイデンティティはUser
は...よく、利用者(人)であるUser
とLogin
、という概念を持っている、とLogin
はUser
認証を行うと資格です。 User
に複数のLogin
が含まれている可能性があります。
OAuthのフローAsp.NetのWebサイトから見たが(VSテンプレートによって生成されたフローのデフォルトのログに基づいて)次のようになりますよう:
- あなたはあなたが外部の認証プロバイダ(認証ミドルウェア)を設定たとえば、Facebook認証を使用するには、Facebookアプリを作成し、そこに返信URLを設定してWebサイトを指し、
FacebookAuthenticationMiddleware
にアプリIDとアプリの秘密のFacebookを設定する必要があります。あなたに提供する)。
- あなたは、サポートしている外部プロバイダーを選択して、認証されていないユーザーを提示します。
- ユーザーが
- Webアプリケーションが使用するプロバイダの名前を(これは通常
AccountController.ExternalLogin
で起こる)を含むChallengeResult
発行選択はあなたAsp.Net Webアプリケーションに送信され、プロバイダを選ぶ、戻りURLを呼び出すように設定されていますAccountController.ExternalLoginCallback
となり、実際のリターンURLのユーザーは後で保存されます。
- 適切なミドルウェアは
ChallengeResult
オブジェクトをキャッチし、ユーザーのブラウザがユーザーに資格情報を要求するサードパーティのWebサイトに移動するHTTPリダイレクト応答に変換します。
- 認証が成功すると、第3部のWebサイトはユーザーをWebサイトにリダイレクトし、認証ミドルウェア(Facebookの場合は
/signin-facebook
IIRC)によって作成された特定のURLにリダイレクトされます。
- 認証ミドルウェアがこの呼び出しを傍受し、サードパーティのWebサイトから渡されたデータを検証します。すべてがOKの場合はが外部クッキーを発行し、手順4で返されたURL(
AccountController.ExternalLoginCallback
)にリダイレクトします。
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>
などの束のインターフェイスを実装するストレージクラスを実装します。
非常に良い答えです。外部サインインの手順8については、Web APIでもsigninmanagerを使用する必要がありますか? –
'SignInManager'は、外部/アプリケーションCookie、パスワード検証、2FAを扱うヘルパークラスです。どのようなものがWeb APIに役立つかは不明です。 – n0rd
非常に明確で有用です。明白さえもしばしば明確に提示する必要があります。ありがとうございました! –