Pau*_*ett 7 asp.net authentication claims-based-identity
如果我想从Request.Url或存储在我的数据库中的某些设置中提取此值,如何在运行时在CookieAuthenticationOptions中设置CookieDOmain?
我想支持子域,但也支持多租户,每个租户都有不同的域.
在配置此时我无法访问其中任何一个.
保罗
MK.*_*MK. 12
您可以指定自己的cookie提供商:
CookieAuthProvider myProvider = new CookieAuthProvider();
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = myProvider
});
Run Code Online (Sandbox Code Playgroud)
要么实现自己的,要么只是继承现有的提供者:
public class CookieAuthProvider : CookieAuthenticationProvider
{
public override void ResponseSignIn(CookieResponseSignInContext context)
{
//Alter you cookie options
//context.CookieOptions.Domain = "www...";
base.ResponseSignIn(context);
}
}
Run Code Online (Sandbox Code Playgroud)
并且实现ResponseSignIn,当端点在将信息转换为cookie之前提供了登录信息时,会调用它.通过实施该方法,可以改变进入票证的权利要求和额外信息.
您将被传递给CookieResponseSignInContext,这会暴露CookieOptions在ResponseSignIn通话期间可以替换或更改的属性.
Katana项目的代码参考:
你是否已经尝试过这个:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Application",
LoginPath = "/Account/Login",
CookieDomain = ".myDomain.com"
});
Run Code Online (Sandbox Code Playgroud)
看起来像MK。答案不允许在使用SlidingExpiration选项时正确处理令牌更新。
作为解决方法,您似乎可以提供自定义 cookie 管理器,并定义自己的添加/删除 cookie 的方法,而不是提供自定义 cookie 提供程序。
为了在我的例子中保持简单,我在后台重用了默认的 cookie 管理器。(我无法扩展它,它的方法不可重写。)
这是我最终得到的代码:
using Microsoft.AspNet.Identity;
using Microsoft.Owin;
using Microsoft.Owin.Infrastructure;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.DataProtection;
using Owin;
public class Startup
{
public void Configuration(IAppBuilder app)
{
var options = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
SlidingExpiration = true,
CookieManager = new CustomCookieManager()
};
app.UseCookieAuthentication(options);
}
}
public class CustomCookieManager : ICookieManager
{
private readonly ICookieManager ConcreteManager;
public CustomCookieManager()
{
ConcreteManager = new ChunkingCookieManager();
}
string ICookieManager.GetRequestCookie(IOwinContext context, string key)
{
return ConcreteManager.GetRequestCookie(context, key);
}
void ICookieManager.AppendResponseCookie(IOwinContext context, string key, string value, CookieOptions options)
{
SetupDomain(context, options);
ConcreteManager.AppendResponseCookie(context, key, value, options);
}
void ICookieManager.DeleteCookie(IOwinContext context, string key, CookieOptions options)
{
SetupDomain(context, options);
ConcreteManager.DeleteCookie(context, key, options);
}
private void SetupDomain(IOwinContext context, CookieOptions options)
{
// custom logic for assigning something to options.Domain
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5658 次 |
| 最近记录: |