C# ASP.Net身份:UseAuthBearTokens和UseCookieAuthentication之间的区别?
ASP.NET团队提供了新的示例,展示了如何使用标识包。它们包含在以下nuget包中:Microsoft Asp.Net标识示例 这些示例非常有用,但是在最初发布的模板中所做的事情发生了大量变化 我的具体问题:在原始SPA模板中,有以下代码:C# ASP.Net身份:UseAuthBearTokens和UseCookieAuthentication之间的区别?,c#,asp.net,asp.net-mvc,asp.net-identity,C#,Asp.net,Asp.net Mvc,Asp.net Identity,ASP.NET团队提供了新的示例,展示了如何使用标识包。它们包含在以下nuget包中:Microsoft Asp.Net标识示例 这些示例非常有用,但是在最初发布的模板中所做的事情发生了大量变化 我的具体问题:在原始SPA模板中,有以下代码: OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/Token"),
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
...
// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);
但在nuget包中的新示例中,该代码已经消失,取而代之的是以下代码:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Account/Login”),
Provider=新CookieAuthenticationProvider
{
//允许应用程序在用户登录时验证安全戳。
//这是一种安全功能,在您更改密码或向帐户添加外部登录时使用。
OnValidateIdentity=SecurityStampValidator.OnValidateIdentity(validateInterval:TimeSpan.FromMinutes(30),regenerateIdentity:(manager,user)=>user.GenerateUserIdentityAsync(manager))
}
});
有人能帮我理解app.useAuthBearTokens和app.UseCookieAuthentication之间的区别吗(以及为什么要进行此更改)?它们似乎都允许应用程序以相同的方式运行,我可以对此更改进行一些说明
谢谢
-BenOAuth用于API安全,在API中您不会使用cookie,这本质上是无状态的。然而,在一个普通的MVC或表单网站上,您将使用一个普通的会话cookie。除非您正在创建一个API,否则我不会担心OAuth,只需要使用传统的基于cookie的auth 如果您想创建一个API,那么您需要,我想说的是,您必须使用OAuth进行验证。然后,您将发送一个令牌和您的请求、post、put、delete。处理程序对该令牌进行解码,以显示权限、用户ID等 我认为最好扩展它并解释问题,以及OAuth解决它的原因 通常,api将位于UI的单独域中,例如应用程序、网站等。如果您确实设法从api(例如facebook.com)获得cookie,则您只能在facebook上使用此cookie。但是你的网站应该是www.myblog.com。Ajax中有一些设置允许通过Ajax请求传递cookie,但是域必须是相同的,这还相当粗略 因此Oauth诞生了,本质上创建了一个可以最好地描述为基于字符串的cookie,它可以存储在您喜欢的任何位置,只要它与您的请求一起在请求头中传递回来
您可以在浏览器应用程序中使用javascript创建cookie,并将令牌保存在此cookie中。这将允许您利用持久性存储。但是,使用可用的本地存储可能更好。因此,对于基于浏览器的应用程序,这将是本地存储API,对于桌面应用程序,您可以使用临时存储、本地数据库等,而手机应用程序将具有类似的功能 感谢您的回答,但我有一个问题,如果我们使用Cordova PhoneGap(混合应用程序),那么我可以使用CookieAuthenticationProvider吗?oauth是基于令牌的,而不是基于cookie的,对于PhoneGap,您可以利用本地存储,或者将令牌存储在cookie中,然后使用javascript读取cookie并提取令牌以发送到头中。这里的问题是ajax请求从未真正发送cookie,我尝试过,无论您使用什么标题,您都无法让它工作,即使您让api发出cookie,ajax也不会发送它,只会发送来自同一域的cookie。@thangchung我已经更新了答案,并提供了一些详细信息,这将有助于你更好地理解这些东西是如何工作的,这是有道理的。我真的很感谢你的回答。干杯