MVC5 Web アプリでは、Asp.net Identity を使用しています。ユーザーが登録すると、いくつかのクレームを追加します。それらはデータベースに保存され、ユーザーがログインすると復元されます。これは完全に機能します。ここで、パラメーター (ログイン ページのチェックボックス) に基づいて、ユーザーのログイン時に特定のクレームをユーザーに追加したいと考えています。ただし、キャッチがあります。このクレームは、そのユーザー固有のセッションにのみ存在します (同じユーザーが別のブラウザー インスタンスまたはデバイスにログオンし、チェックボックスをオンにしない場合、そのユーザーはそのクレームを持ちません)。私は使用しておらず、asp.net セッションに依存したくありません。
これを簡単に実装し、呼び出し時に Claim を追加するだけAuthenticationManager.SignIn
です:
private async Task SignInAsync(CustomUser user, bool isPersistent, bool myCustomTemporaryClaim)
{
var identities = await user.GenerateUserIdentityAsync(UserManager);
if (myCustomTemporaryClaim)
{
identities.AddClaim(new Claim(CustomClaimTypes.MyCustomTemporaryClaim, "true"));
}
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identities);
}
これはうまくいきます。ただし、VS テンプレートに付属するデフォルトの asp.net ID 実装は、30 分ごとに ID を「更新」するように構成されています。これが発生すると、カスタム クレームが失われます。だから、私が知りたいのは、asp.net IDがCookieを再生成する前に、「傍受」してカスタムクレーム値を取得することは可能ですか?
削除することはできregenerateIdentityCallback
ますが、この結果がどうなるかはわかりません。