Asp.net mvc 了解ASP.NET MVC5新的身份验证机制
您好,我正在尝试了解SPA模板中MVC5中的新身份验证机制是如何工作的,我似乎感到困惑。我的最终目标是创建一个API,该API将公开给SPA、iOS、Android和Windows Phone客户端 以下是我的理解: 我知道,在刚开始的时候,课堂上装饰着:Asp.net mvc 了解ASP.NET MVC5新的身份验证机制,asp.net-mvc,oauth-2.0,asp.net-mvc-5,Asp.net Mvc,Oauth 2.0,Asp.net Mvc 5,您好,我正在尝试了解SPA模板中MVC5中的新身份验证机制是如何工作的,我似乎感到困惑。我的最终目标是创建一个API,该API将公开给SPA、iOS、Android和Windows Phone客户端 以下是我的理解: 我知道,在刚开始的时候,课堂上装饰着: [assembly: OwinStartup(typeof(WebApplication1.Startup))] 正在magicly调用ConfigureAuth方法: 在这个方法中,我有3行代码,在启动类构造函数中,我初始化了OAuth身
[assembly: OwinStartup(typeof(WebApplication1.Startup))]
正在magicly调用ConfigureAuth方法:
在这个方法中,我有3行代码,在启动类构造函数中,我初始化了OAuth身份验证选项:
static Startup(){
PublicClientId = "self";
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
OAuthOptions = new OAuthAuthorizationServerOptions {
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
}
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
app.UseOAuthBearerTokens(OAuthOptions);
}
静态启动(){
PublicClientId=“self”;
UserManagerFactory=()=>new UserManager(new UserStore());
OAuthOptions=新的OAuthAuthorizationServerOptions{
TokenEndpointPath=新路径字符串(“/Token”),
Provider=新的ApplicationAuthProvider(PublicClientId,UserManagerFactory),
AuthorizeEndpointPath=新路径字符串(“/api/Account/ExternalLogin”),
AccessTokenExpireTimeSpan=TimeSpan.FromDays(14),
AllowInsecureHttp=true
};
}
public void ConfigureAuth(IAppBuilder应用程序)
{
app.UseCookieAuthentication(新的CookieAuthenticationOptions());
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
应用程序使用OAuthBealerTokens(OAuthOptions);
}
ConfigureAuth中的前两行似乎将我的应用程序和外部应用程序设置为使用cookies存储身份验证状态,而第三行似乎表示它正在为我的应用程序使用承载令牌
从目前为止我对移动设备的有限知识来看,本机应用程序不理解cookies,我应该使用令牌进行身份验证
如果是这样的话,externalSignIn不应该设置为Bear tokes而不是ExternalCookie吗
在调试过程中,我还注意到,在OAuthProvider中,身份验证类型实际上设置为bearrer令牌。如果是这种情况,那么这行代码实际上做了什么:
app.UseCookieAuthentication(新的CookieAuthenticationOptions())
如果能澄清一下这一点,我将不胜感激。我只能在网上找到有关tu如何使用外部登录的信息。在我看来,MVC 5 SPA模板不仅仅是对特定最佳实践的承诺,更是一种证明 我发现删除行
app.UseCookieAuthentication(新的CookieAuthenticationOptions())
对SPA没有任何影响,因为与SPA的典型情况一样,所有需要的HTML都是匿名检索的,并且此后,所有身份验证都是在任何后续的数据请求上完成的。在这种情况下,将从WebAPI端点检索数据,并使用承载令牌进行保护
我不知道为什么会这样做。还有许多其他类似的领域,其中两个不同的关注点有点混乱。例如,传统的Global.asax MVC应用程序_Start
仍然存在,但新的OWIN启动机制也存在。在OWIN启动中,应用程序_Start
中的所有内容(过滤器/路由/捆绑注册等)没有理由无法处理
还有其他问题。如果您打开外部身份验证(例如使用Google),然后减少AccessTokenExpireTimeSpan
,您会发现当令牌过期时,您的SPA会显示“此请求的授权已被拒绝”消息。换句话说,没有用于令牌刷新的机制。由于访问令牌超时被设置为14天,这并不是立即显而易见的,这在考虑跨站点请求伪造攻击等时是相当不安全的。此外,没有强制执行传输安全机制,例如SSL。令牌本身并不安全,需要在传输过程中加以保护,以防止CRSF攻击和在传输过程中提取数据
所以,我认为MVC5SPA是一个很好的演示,但我不会在生产中使用它。它展示了新的OWIN中间件可以做什么,但它不能替代基于令牌的安全性的全面知识