2

私はASP.NET MVC 5のWebサイトを構築しており、依存性注入にUnityを使用しています。トークンの生成とトークンの検証の間にある時間が経過した(1時間以上、1日未満)と、無効なトークン例外が発生します。ASP.NET MVC 5とDependency Injection with Unityを使用しているときに無効なトークン

私は私のStartup.csに次のコードをしている:私はそれは私のApplicationUserManagerクラスのconctructorに次のコード(タイムスパンは、今念のため7日に設定されている

internal static IDataProtectionProvider DataProtectionProvider { get; private set; } 

public void Configuration(IAppBuilder app) 
{ 
    DataProtectionProvider = app.GetDataProtectionProvider(); 
    ConfigureAuth(app); 
} 

ではありませんしています問題):

app.CreatePerOwinContext(() => DependencyResolver.Current.GetService<ApplicationUserManager>()); 
:Startup.Auth.csで

var dataProtectionProvider = Startup.DataProtectionProvider; 
if (dataProtectionProvider != null) 
{ 
    this.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser> (dataProtectionProvider.Create("ASP.NET Identity")) { 
     TokenLifespan = TimeSpan.FromDays(7) 
    }; 
} 

、私はConfigureAuthメソッドのコードの次の行を持っています私は私のシナリオの一つは、関連するユーザーアカウントを使用して連絡先を作成できますことを追加する必要が

container.RegisterType<ApplicationDbContext>(); 
container.RegisterType<ApplicationSignInManager>(); 
container.RegisterType<ApplicationUserManager>(); 
container.RegisterType<ApplicationRoleManager>(); 
container.RegisterType<IAuthenticationManager>(
    new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication) 
    ); 
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(
    new InjectionConstructor(typeof(ApplicationDbContext)) 
); 
container.RegisterType<IRoleStore<IdentityRole, string>, RoleStore<IdentityRole>>(
    new InjectionConstructor(typeof(ApplicationDbContext)) 
); 

:UnityConfig.csで

は、私は、依存性注入を設定しています。連絡先と関連付けられたユーザーアカウントはContactControllerに作成され、ConfirmEmailメソッドはAccountControllerに作成されます。どちらもApplicationUserManagerをコンストラクタパラメータとして使用します。つまり、ApplicationUserManagerがコントローラに注入されます。

確認メールを受け取った直後にすべてを確認しても問題ありません。しかし、1時間ほど待って確認しようとすると、無効なトークン例外が発生します。

私はすでに誤って別のトークンタイプを混ぜていないことを確認しています。世代と検証の両方が電子メールによる確認用です。また、トークンをエンコード(およびデコード)するURLであることを確認しました。

私は現在、独自のIISを実行している静的IPを持つAzure仮想マシンをテストしています。プロダクション環境はAzure以外のVPS上にある可能性が高く、独自のIISを実行しています。私はAzureのエキスパートではありませんが、私の知る限りでは、ロードバランシングに関連するオプションは選択しませんでした。

私はすでにここや他のウェブサイトで見つけられた可能な解決策を試したので、本当に助けていただきありがとうございます。

答えて

0

無効なトークンの問題が解決されました。しばらくしてからしか起こらなかったので、私はそれが私のアプリケーションのリサイクルと関係するかもしれないと考えました。

私はweb.config内に固定されたMachineKeyを設定することで問題を取り除くことができました。 https://blogs.msdn.microsoft.com/vijaysk/2009/05/13/iis-7-tip-10-you-can-generate-machine-keys-from-the-iis-manager/

注:何らかの理由でIISは、何らかの理由で、マシンキーを生成するときにIsolateAppsを追加します。しかし、これはASP.NETが例外を投げる結果となります。 IsolateAppsを手動で削除して保存した後は、期待通りに機能するはずです。

関連する問題