根据浏览器有条件地设置ASP.NET会话和身份验证Cookie的相同站点值

尼科

我对我的web.config进行了以下更改,并且可以使用samesite = none和secure服务器身份验证和会话cookie。

问题是因为Chrome 51-66之类的浏览器发送samesite = none会使Cookie无效,然后用户没有会话并且无法登录。https://www.chromium.org/updates/same-site/incompatible-clients

有没有一种方法可以扩展创建这些cookie的类,或者以其他方式基于浏览器/用户代理有条件地设置相同站点参数

<system.web>
    <httpCookies sameSite="None"/>
    <sessionState cookieSameSite="None" />
    <authentication mode="Forms">
        <forms cookieSameSite="None" />
    </authentication>

虽然不是一个完整的解决方案(因为它仅覆盖会话cookie(在用例中是我手动设置的形式身份验证cookie)),但我在MVC5应用程序中实现了以下内容来处理SameSite属性的设置

Global.asax.cs中

protected void Session_Start(object sender, EventArgs e)
{
    var cookie = Response.Cookies["ASP.NET_SessionId"];
    if (cookie != null)
        cookie.SameSite = SameSiteCookieUtils.GetSameSiteMode(Request.UserAgent, SameSiteMode.None);
}
// Ref https://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-3.1#supporting-older-browsers
public static class SameSiteCookieUtils
{
    /// <summary>
    /// -1 defines the unspecified value, which tells ASPNET to not send the SameSite attribute
    /// </summary>
    public const SameSiteMode Unspecified = (SameSiteMode) (-1);

    public static SameSiteMode GetSameSiteMode(string userAgent, SameSiteMode mode)
    {
        if (string.IsNullOrWhiteSpace(userAgent))
            return mode;

        if (mode == SameSiteMode.None && DisallowsSameSiteNone(userAgent))
            return Unspecified;

        return mode;
    }

    public static bool DisallowsSameSiteNone(string userAgent)
    {
        // Cover all iOS based browsers here. This includes:
        // - Safari on iOS 12 for iPhone, iPod Touch, iPad
        // - WkWebview on iOS 12 for iPhone, iPod Touch, iPad
        // - Chrome on iOS 12 for iPhone, iPod Touch, iPad
        // All of which are broken by SameSite=None, because they use the iOS networking
        // stack.
        if (userAgent.Contains("CPU iPhone OS 12") ||
            userAgent.Contains("iPad; CPU OS 12"))
        {
            return true;
        }

        // Cover Mac OS X based browsers that use the Mac OS networking stack.
        // This includes:
        // - Safari on Mac OS X.
        // This does not include:
        // - Chrome on Mac OS X
        // Because they do not use the Mac OS networking stack.
        if (userAgent.Contains("Macintosh; Intel Mac OS X 10_14") &&
            userAgent.Contains("Version/") && userAgent.Contains("Safari"))
        {
            return true;
        }

        // Cover Chrome 50-69, because some versions are broken by SameSite=None,
        // and none in this range require it.
        // Note: this covers some pre-Chromium Edge versions,
        // but pre-Chromium Edge does not require SameSite=None.
        if (userAgent.Contains("Chrome/5") || userAgent.Contains("Chrome/6"))
        {
            return true;
        }

        return false;
    }
}

随着DisallowsSameSiteNone逻辑从微软文档来https://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-3.1#supporting-older-browsers

我也在我的设定 web.config

<httpCookies httpOnlyCookies="true" requireSSL="true" />

希望其中一些对您有用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据日期有条件地设置数据框的值

来自分类Dev

有条件地选择和设置列值

来自分类Dev

根据属性值有条件地包含组件

来自分类Dev

如何在asp.net MVC视图中有条件地设置模型?

来自分类Dev

设置字段以有条件地使用必需的字段验证器

来自分类Dev

有条件地在多列上设置值

来自分类Dev

XSLT有条件地设置属性值

来自分类Dev

有条件地设置单选按钮值

来自分类Dev

在 groupby 熊猫中有条件地设置值

来自分类Dev

有条件地设置和清除间隔

来自分类Dev

如何有条件地调用spring验证器

来自分类Dev

会话超时asp.net和身份验证

来自分类Dev

有条件地根据另一个变量设置一个变量的值

来自分类Dev

如何根据单元格值有条件地对ReactJs物料表单元格进行样式设置?

来自分类Dev

有条件地验证收集

来自分类Dev

有条件地验证收集

来自分类Dev

有条件地比较值

来自分类Dev

如何有条件地删除由ASP.NET Core注册并添加到ServiceCollection的控制器

来自分类Dev

熊猫数据框:根据过去的日期和值有条件地添加列

来自分类Dev

R:根据列前缀和后缀有条件地替换值

来自分类Dev

如何使用 jQuery 根据站点的语言有条件地显示链接

来自分类Dev

根据所有列的值有条件地删除熊猫中的行

来自分类Dev

如何通过会话令牌和cookie安全地进行身份验证?更新

来自分类Dev

可以根据语言Cookie的内容有条件地构建烧瓶“ WTForms类”

来自分类Dev

返回时,ASP .NET Core Cookie身份验证过期从时间戳更改为“会话”

来自分类Dev

ASP.Net Forms身份验证Cookie跨会话传递

来自分类Dev

根据另一个键的值有条件地打印值

来自分类Dev

根据非NaN列的值有条件地在Pandas DataFrame中填充NaN值

来自分类Dev

根据其他列的值有条件地更改系列的值

Related 相关文章

  1. 1

    如何根据日期有条件地设置数据框的值

  2. 2

    有条件地选择和设置列值

  3. 3

    根据属性值有条件地包含组件

  4. 4

    如何在asp.net MVC视图中有条件地设置模型?

  5. 5

    设置字段以有条件地使用必需的字段验证器

  6. 6

    有条件地在多列上设置值

  7. 7

    XSLT有条件地设置属性值

  8. 8

    有条件地设置单选按钮值

  9. 9

    在 groupby 熊猫中有条件地设置值

  10. 10

    有条件地设置和清除间隔

  11. 11

    如何有条件地调用spring验证器

  12. 12

    会话超时asp.net和身份验证

  13. 13

    有条件地根据另一个变量设置一个变量的值

  14. 14

    如何根据单元格值有条件地对ReactJs物料表单元格进行样式设置?

  15. 15

    有条件地验证收集

  16. 16

    有条件地验证收集

  17. 17

    有条件地比较值

  18. 18

    如何有条件地删除由ASP.NET Core注册并添加到ServiceCollection的控制器

  19. 19

    熊猫数据框:根据过去的日期和值有条件地添加列

  20. 20

    R:根据列前缀和后缀有条件地替换值

  21. 21

    如何使用 jQuery 根据站点的语言有条件地显示链接

  22. 22

    根据所有列的值有条件地删除熊猫中的行

  23. 23

    如何通过会话令牌和cookie安全地进行身份验证?更新

  24. 24

    可以根据语言Cookie的内容有条件地构建烧瓶“ WTForms类”

  25. 25

    返回时,ASP .NET Core Cookie身份验证过期从时间戳更改为“会话”

  26. 26

    ASP.Net Forms身份验证Cookie跨会话传递

  27. 27

    根据另一个键的值有条件地打印值

  28. 28

    根据非NaN列的值有条件地在Pandas DataFrame中填充NaN值

  29. 29

    根据其他列的值有条件地更改系列的值

热门标签

归档