Skip to content

Instantly share code, notes, and snippets.

@bgilbert6
Last active May 23, 2020 21:46
Show Gist options
  • Save bgilbert6/dc8d87238ac471ca6c9bc2bcde2ced0b to your computer and use it in GitHub Desktop.
Save bgilbert6/dc8d87238ac471ca6c9bc2bcde2ced0b to your computer and use it in GitHub Desktop.
Per Browser Tab Dotnet Core Cookie Authentication
public class CustomCookieManager : ICookieManager
{
private const string CookieTabContext = "X-Shop-Name";
private readonly ChunkingCookieManager _innerCookieManager = new ChunkingCookieManager();
public void AppendResponseCookie(HttpContext context, string key, string value, CookieOptions options)
{
key = GetTabContext(context) + key;
_innerCookieManager.AppendResponseCookie(context, key, value, options);
}
private string GetTabContext(HttpContext context)
{
var cookieContext = context.Items[CookieTabContext];
if (cookieContext == null)
{
throw new InvalidOperationException(string.Format("Request is missing header: {0}", CookieTabContext));
}
return cookieContext.ToString();
}
public void DeleteCookie(HttpContext context, string key, CookieOptions options)
{
key = GetTabContext(context) + key;
_innerCookieManager.DeleteCookie(context, key, options);
}
public string GetRequestCookie(HttpContext context, string key)
{
key = GetTabContext(context) + key;
return _innerCookieManager.GetRequestCookie(context, key);
}
}
app.Use(async (context, next) =>
{
var shopHeader = context.Request.Headers["X-Shop-Name"].FirstOrDefault();
var shop = string.Empty;
if (shopHeader == null)
{
context.Items["X-Shop-Name"] = context.Request.Query["shop"].ToString();
} else
{
context.Items["X-Shop-Name"] = shopHeader.ToString();
}
await next();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment