您好我试图了解新的身份验证机制如何在SPA模板中的MVC5中工作,我似乎感到困惑。我的最终目标是创建一个将暴露给SPA,iOS的API, Android和Windows Phone客户端
以下是我的理解:
我理解在启动时以某种方式装饰的类:
[assembly: OwinStartup(typeof(WebApplication1.Startup))]
神奇地调用了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);
}
ConfigureAuth中的前两行似乎将我的应用程序和外部应用程序设置为使用cookie来存储身份验证状态,而第三行似乎表明它正在为我的应用程序使用承载令牌。
到目前为止,我对移动设备的有限知识本机应用程序不了解cookie,我应该使用令牌进行身份验证。
如果是这种情况,那么不应该将externalSignIn设置为Bearer tokes而不是外部cookie吗?
调试时我还注意到在OAuthProvider中,身份验证类型实际设置为bearrer令牌。如果是这样的话,那么这行代码实际上是这样做的:
app.UseCookieAuthentication(new CookieAuthenticationOptions());
对于如何工作的一些澄清将非常感激我只能在网上找到信息,告诉我如何使用外部登录。
答案 0 :(得分:5)
在我看来,MVC 5 SPA模板证明了对特定最佳实践的承诺是可能的。
我发现删除行app.UseCookieAuthentication(new CookieAuthenticationOptions());
根本不会对SPA产生任何影响,因为正如SPA一样,所有需要的HTML都是匿名检索的,之后所有的身份验证都是在后续的任何请求中完成的。数据。在这种情况下,将从WebAPI端点检索数据并使用承载令牌进行保护。
我不知道为什么会这样做。还有许多其他领域,其中两个不同的问题有点混乱。例如,传统的Global.asax MVC Application_Start
仍然存在,但新的OWIN启动机制也存在。没有理由在OWIN Startup中无法处理Application_Start
(过滤/路由/捆绑注册等)中的所有内容。
还有其他问题。如果您启用外部身份验证(例如使用Google),然后减少AccessTokenExpireTimeSpan
,您会发现当令牌过期时,您的SPA会显示“此请求已被拒绝授权”。信息。换句话说,没有用于令牌刷新的机制。这并不是立即显而易见的,因为访问令牌超时设置为14天,这在考虑跨站点请求伪造攻击等时相当不安全。此外,没有强制执行传输安全机制,例如SSL。令牌不本质上是安全的,需要在传输中加以保护,以防止CRSF攻击和数据在途中被提取。
所以,MVC 5 SPA作为一个演示很好,我想,但我不会在生产中使用它。它显示了新的OWIN中间件可以做什么,但它无法替代基于令牌的安全性的全面知识。