c# - 为什么我的 asp.net identity -user 会自动注销

标签 c# asp.net asp.net-mvc cookies asp.net-web-api2

我有一个包含 asp.net MVC 和 asp.net WebApi 的项目。

我不知道为什么用户会自动注销,例如当我关闭浏览器并在 15 分钟后我发现我需要重新登录并且在我将用户重定向到银行网站进行付款后银行网站再次将用户重定向到我的网站需要重新登录。

我使用asp.net身份验证cookie,下面是我的StartUp.cs文件代码:

public class Startup
{
    public string Issuer { get; set; }
    public void Configuration(IAppBuilder app)
    {
        Issuer = "http://localhost:37993/";

        ConfigureOAuthTokenGeneration(app);
        ConfigureOAuthTokenConsumption(app);

        app.UseCors(CorsOptions.AllowAll);

        GlobalConfiguration.Configure(WebApiConfig.Register);
        AreaRegistration.RegisterAllAreas();
        //app.UseWebApi(GlobalConfiguration.Configuration);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        //app.UseMvc(RouteConfig.RegisterRoutes);

        //ConfigureWebApi(GlobalConfiguration.Configuration);

    }
    private void ConfigureOAuthTokenGeneration(IAppBuilder app)
    {
        app.CreatePerOwinContext(() => new LeitnerContext());
        app.CreatePerOwinContext<LeitnerUserManager>(LeitnerUserManager.Create);
        app.CreatePerOwinContext<LeitnerRoleManager>(LeitnerRoleManager.Create);

        // Plugin the OAuth bearer JSON Web Token tokens generation and Consumption will be here

        app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new Microsoft.Owin.PathString("/User/Login"),
            ExpireTimeSpan = TimeSpan.FromDays(15),
            Provider = new CookieAuthenticationProvider
            {
                OnApplyRedirect = ctx =>
                {
                    if (!IsForApi(ctx.Request))
                    {
                        ctx.Response.Redirect(ctx.RedirectUri);
                    }
                }
            }
        });
        OAuthAuthorizationServerOptions options = new OAuthAuthorizationServerOptions()
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/api/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(15),
            Provider = new LeitnerOAuthProvider(),
            AccessTokenFormat = new LeitnerJwtFormat(Issuer),
        };
        app.UseOAuthAuthorizationServer(options);
        //app.UseJwtBearerAuthentication(options);
        //app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
        //app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

    }

    private bool IsForApi(IOwinRequest request)
    {
        IHeaderDictionary headers = request.Headers;
        return ((headers != null) && ((headers["Accept"] == "application/json") || (request.Path.StartsWithSegments(new PathString("/api")))));
    }

    private void ConfigureOAuthTokenConsumption(IAppBuilder app)
    {
        var a = AudiencesStore.AudiencesList["LeitnerAudience"];
        string audienceId = a.ClientId;// ConfigurationManager.AppSettings["as:AudienceId"];
        byte[] audienceSecret = TextEncodings.Base64Url.Decode(a.Base64Secret/*ConfigurationManager.AppSettings["as:AudienceSecret"]*/);

        // Api controllers with an [Authorize] attribute will be validated with JWT
        app.UseJwtBearerAuthentication(
            new JwtBearerAuthenticationOptions
            {
                AuthenticationMode = AuthenticationMode.Active,
                AllowedAudiences = new[] { audienceId },
                IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
                {
                    new SymmetricKeyIssuerSecurityTokenProvider(Issuer, audienceSecret)
                }
            });
    }
}

谁知道为什么会出现这个问题?

最佳答案

用户注销的原因是表单验证数据和 View 状态数据的验证错误。它可能由于不同的原因而发生,包括在托管服务中使用网络场。您应该检查 <machineKey>在您的项目 webconfig 中。

如果你没有 <machineKey>在你的webconfig ,尝试在<system.web>之后加入这段代码在你的webconfig :

<machineKey
      validationKey="someValue"
      decryptionKey="someValue"
      validation="SHA1" decryption="AES"/>

有一些在线工具可以生成机器 key 。你可以查看thisthis .

您可以从this了解更多关于机器 key 的信息关联。

关于c# - 为什么我的 asp.net identity -user 会自动注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994611/

相关文章:

c# - 在 C# 中使用特定版本的 dll

ASP.Net MVC - 从代码隐藏生成 ActionLink?

c# - 相对路径,可在控制台应用程序和 ASP.NET Web 应用程序中使用

c# - 如何在 PagedList.Mvc 中拥有多个 PagedListRenderOptions?

.net - 如何保护 Elmah 使用 ASP.NET 和 IIS 5.1 URL 路由

c# - LINQ C# 查询的逻辑是什么?

c# - 如何在 C# 中使用 redis pipiline(StackExchange.Redis)?

c# - 不正确的字符串值 : '\xEF\xBF\xBD' for column

jquery - JqG​​rid 在 jquery 对话框中显示为不可编辑的模式

asp.net-mvc - 如何通过MVC Controller上传录制的音频(recorder.js-master)?