Asp.net mvc 了解ASP.NET MVC5新的身份验证机制

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身

您好,我正在尝试了解SPA模板中MVC5中的新身份验证机制是如何工作的,我似乎感到困惑。我的最终目标是创建一个API,该API将公开给SPA、iOS、Android和Windows Phone客户端

以下是我的理解:

我知道,在刚开始的时候,课堂上装饰着:

[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中间件可以做什么,但它不能替代基于令牌的安全性的全面知识