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))
}
});
任何人都可以帮我理解app.UseOAuthBearerTokens和app.UseCookieAuthentication之间的区别(以及为何进行此更改)?它们似乎都允许应用程序以相同的方式运行,我可以对此更改使用一些澄清。
...谢谢
-Ben
答案 0 :(得分:15)
OAuth用于API安全,IN API不使用Cookie,这基本上是无状态的。但是,对于普通的MVC或表单网站,您可以使用普通的会话cookie。除非您正在创建API,否则我不会担心OAuth,只需使用传统的基于cookie的身份验证。
如果你想创建一个API,那么你需要,我会说必须要OAuth进行验证。然后,您将发送包含您的请求,发布,放置,删除的令牌。该令牌由处理程序解码后端以显示权限,用户ID等
认为最好扩展这个并解释问题,以及为什么OAuth会解决它。
通常api将位于UI的单独域中,即APP,网站等。如果您确实设法从API(例如facebook.com)获得cookie,您将只能使用Facebook上的这个cookie。但您的网站将是www.myblog.com。 Ajax中有一些设置可以使用ajax请求传递cookie,但是域必须是相同的,这仍然是相当粗略的。
所以Oauth诞生了,基本上创建了一个最好被描述为基于字符串的cookie,可以随意存储,只要它在请求标题中与您的请求一起传回。
您可以在浏览器应用程序中使用javascript创建cookie,并将令牌保存在此cookie中。这将允许您利用持久存储。但是,使用可用的本地存储可能更好。因此,对于基于浏览器的应用程序,这将是LocalStorage API,对于桌面应用程序,您可以使用临时存储,本地数据库等,而手机应用程序将具有类似的功能。