ASP.NET团队提供了新的示例,展示了如何使用标识包。它们包含在以下nuget包中:Microsoft Asp.Net Identity Samples
这些示例非常有用,但与附带的模板中最初的操作方式相比,有很多更改。
我的具体问题是:在最初的SPA模板中,有以下代码:
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))
}
});
有人能帮我理解应用程序之间的区别吗。使用OAuthBearerTokens和应用程序。UseCookieAuthentication(以及为什么进行此更改)?它们似乎都允许应用程序以相同的方式运行,我可以对这一更改进行一些澄清。
谢谢。。。
-Ben
OAuth用于API安全,在API中您不会使用cookie,这基本上是无状态的。然而,在一个普通的MVC或表单网站上,你会使用一个正常的会话cookie。除非您正在创建API,否则我不会担心OAuth,只使用传统的基于cookie的auth。
如果你想创建一个API,那么你需要,我会说必须做OAuth验证。然后,您将发送一个令牌,其中包含您的请求、张贴、放置、删除。该令牌由处理程序在后端解码,以显示权限、用户ID等
我认为最好扩展它并解释问题,以及OAuth解决它的原因
通常,一个api会在UI的一个单独的域上,无论是应用程序、网站等。如果你确实从api(例如facebook.com)获得了一个cookie,你只能在facebook上使用这个cookie。但你的网站应该是www.myblog.com。Ajax中有一些设置可以通过Ajax请求传递cookie,但域必须相同,这仍然相当粗略。
因此,Oauth诞生了,本质上是创建了一个可以被最好地描述为基于字符串的cookie,只要它与您的请求一起在请求头中传递回来,它就可以按照您的意愿存储。
您可以在浏览器应用程序中使用javascript创建cookie,并将您的令牌保存在此cookie中。这将使您能够利用持久存储。但是,最好使用可用的本地存储。因此,对于基于浏览器的应用程序,这将是LocalStorage API,对于桌面应用程序,你可以使用临时存储、本地数据库等,而手机应用程序也会有类似的功能。