【问题标题】:Naming cookies in ASP.NET 5在 ASP.NET 5 中命名 cookie
【发布时间】:2016-04-24 05:59:46
【问题描述】:

在我的 ASP.NET 5 MVC 6 应用程序中,我只使用没有 ASP.NET Identity 的 cookie 中间件——如本文档中所述:https://docs.asp.net/en/latest/security/authentication/cookie.html

我也在使用社交身份验证,即 Facebook、Google 等。所以用户通过社交网络进行身份验证,然后我使用 cookie 中间件来管理用户的会话。

在应用程序中,我需要创建两个 cookie,即新用户完成注册之前的临时 cookie 和注册完成后的常规 cookie。

我想为这些 cookie 命名,并能够通过它们的名称来查找它们。我该怎么做?

【问题讨论】:

    标签: c# cookies asp.net-identity asp.net-core


    【解决方案1】:

    您可以直接在中间件选项中替换默认的cookie名称:

    app.UseCookieAuthentication(options => {
        options.AuthenticationScheme = "Instance1";
        options.CookieName = "MyCookie";
    });
    
    app.UseCookieAuthentication(options => {
        options.AuthenticationScheme = "Instance2";
        options.CookieName = "MyOtherCookie";
    });
    

    要检索与特定方案关联的ClaimsPrincipal 实例,请使用AuthenticateAsync

    var principal = await context.Authentication.AuthenticateAsync("Instance2");
    

    【讨论】:

    • 我如何查找特定的 cookie,例如 MyOtherCookie?目前,我只是将用户设置为 var user = HttpContext.User。我如何专门从“MyOtherCookie”获取用户信息。这对我来说很重要,因为如果“MyOtherCookie”不存在,我需要将用户重定向到注册页面等。
    • 您需要为此使用AuthenticateAsync
    • 我明白了。也许实现一个 AuthorizeFilter 以便我可以在请求到达控制器方法之前拦截请求并检查 cookie 类型,对吗?
    • 您可以使用[Authorize(ActiveAuthenticationSchemes = "MyOtherCookie")] 装饰您的操作,但如果您需要精确控制每个操作或每个控制器而不是全局(这就是SignInManager.ExternalLoginSignInAsync 所做的)。
    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 2014-03-23
    • 2010-11-20
    • 2020-12-13
    • 2015-04-04
    • 2017-04-30
    • 1970-01-01
    • 2015-12-27
    相关资源
    最近更新 更多