0

的Web API的应用程序我有这样的解决方案:身份验证只是在MVC一次使用asp.net身份

enter image description here

我需要在ASP.NET MVC网站,在Web API 2.0只进行一次认证(我的意思是我不必检查用户名和密码在MVC网站上是否正确,然后再次在Web Api上检查它们)。

我真的认为AngularJS和ASP.NET MVC是不是一个很好的夫妇。但是,就是这样! ASP.NET MVC网站和Web Api可能位于不同的服务器上。

在这一瞬间我就可以在MVC应用程序验证,我不能“通”的认证上的web API。我正在使用ASP.NET标识的默认代码。所以,我的即时通讯类startup我:

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.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 

所以,我怎么能“自动”认证的网络API,一旦我已经通过验证的asp.net的MVC?

谢谢

UPDATE

我已经更新了图像。 在这一刻,我做了一些来自MVC应用程序的请求。但是这些请求不需要认证。其他一些请求从angularjs到达,在这里我需要身份验证。 在这一刻我认证MVC应用程序中的用户。

回答

0

如果我有这个权利,那么你的问题有一个非常简单的解决方案。

用户在MVC应用程序,这意味着到MVC控制器和操作方法的任何调用保护的认证,并已成功验证对。

在您的MVC应用程序中,您正在向您的WEB API发出请求。

在Web API需要以某种方式保护自己的资源,从传入的请求,并考虑到只有你的MVC应用程序应负责制定这些要求,你应该实现你的WEB API中的客户端机密的OAuth流。

将其视为将您的MVC应用注册为您的WEB API的使用者。

从MVC应用程序每次调用网页API,提供它的clientid和保密您的Web API服务了它的资源之前验证。

从查看Web API的角度来看它不关心用户是谁,只关心那些试图访问其资源的应用程序。

如果一个应用程序不能提供一个秘密,那么他们就不能访问。

*编辑*

在这样一个场景,你的Web API不是面向公众的,只需要身份验证访问其资源,您的客户端浏览器不应该直接谈话的API。

你可以使用基于令牌的认证,即一旦通过令牌端点客户端浏览器传递到您API的每个请求的报头的承载令牌认证。

然而,这将意味着你传递一个访问令牌到浏览器,我不认为这是伟大的安全。

这就是为什么我会重新开始客户端的浏览器永远只能做的MVC应用程序作为其中的电话不能被操纵的服务器和所有的访问令牌上的生活调用不能被截获。

+0

嗨@Derek ...你是正确的部分:在MVC应用程序,我有保护控制器和I已成功验证那里。但是我的web API必须关心用户的身份验证!因此,将您的MVC应用程序注册为您的WEB API的使用者是不够的 – Ciccio

+0

什么是调用Web API?是从MVC应用程序的范围中调用的?在其操作方法中,还是通过AngularJS从客户端浏览器向api发出请求?你的图表表明否则。 – Derek

+0

这取决于上下文......在这个时候,前端和后端在同一台机器上AngularJs将直接调用Web API。在后端将被移动到不可见的服务器的时刻,angularJs将通过MVC调用web api。在这一刻,你是对的,我的图是错的...(我更正) – Ciccio