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