gpt4 book ai didi

asp.net - CookieAuthenticationOptions.AuthenticationType 用于什么?

转载 作者:行者123 更新时间:2023-12-04 13:37:41 25 4
gpt4 key购买 nike

在我的应用程序的 Asp.Net Identity Auth 中间件设置中,我有

app.UseCookieAuthentication(new CookieAuthenticationOptions {
LoginPath = new PathString("/Login/"),
//AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
Provider = new CookieAuthenticationProvider {
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<MyUserManager, MyUser>(
TimeSpan.FromMinutes(30),
(manager, user) => manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie)
),
},
});

我从另一个应用程序复制了这个,我只是注意到如果我取消注释 AuthenticationType行,登录成功(我在我的记录器中收到一条从 Controller 写入的成功消息)但总是重定向回登录屏幕。

documentation for CookieAuthenticationOptions它说

The AuthenticationType in the options corresponds to the IIdentity AuthenticationType property. A different value may be assigned in order to use the same authentication middleware type more than once in a pipeline.(Inherited from AuthenticationOptions.)



我真的不明白这意味着什么,为什么这会导致我的登录请求被重定向(在成功登录之后),也不明白这个选项有什么用处。

最佳答案

这是一个字符串,可以是任何东西。但这是身份验证类型的标识符。并且您可以有多种身份验证类型:您的用户数据库、Google、Facebook 等。据我所知,这是在登录时添加为生成的 cookie 的声明。

当您注销用户时,您需要知道身份验证提供程序。如果您的身份验证中间件是这样定义的:

    app.UseCookieAuthentication(new CookieAuthenticationOptions {
LoginPath = new PathString("/Login/"),
AuthenticationType = "My-Magical-Authentication",
// etc...
},
});

然后要注销用户,您需要相同的魔术字符串: AuthenticationManager.SignOut("My-Magical-Authentication")
此字符串也被传递到 ClaimsIdentity创建主体时。没有 AuthenticationType主体无法通过身份验证 because :
/// <summary>
/// Gets a value that indicates whether the identity has been authenticated.
/// </summary>
///
/// <returns>
/// true if the identity has been authenticated; otherwise, false.
/// </returns>
public virtual bool IsAuthenticated
{
get
{
return !string.IsNullOrEmpty(this.m_authenticationType);
}
}

此方法 IsAuthenticated在整个 MVC 代码库中使用,所有身份验证机制都依赖于此。

此外,理论上您可以通过多个提供商登录,并且一次仅注销其中一个,其余提供商仍需通过身份验证。虽然我从来没有尝试过这个。

我刚刚发现的另一个用途 - 如果您不提供 CookieName在您的中间件配置中,然后 Options.CookieName = CookieAuthenticationDefaults.CookiePrefix + Options.AuthenticationType; ( see second if statement in constructor )。

我相信有更多的地方使用它。但最重要的是提供它并与名称保持一致,否则您将在身份验证系统中遇到细微的错误。

关于asp.net - CookieAuthenticationOptions.AuthenticationType 用于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35653428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com