0

를 사용하여 :인증합니다 나는이 솔루션이 한 번만 MVC와 웹 API 응용 프로그램을 asp.net 정체성

enter image description here

내가 ASP.NET MVC 사이트와 웹 API 2.0에 한 번만를 인증 할 필요를 (MVC 사이트에서 사용자 이름과 비밀번호가 올바른지 확인한 다음 Web API에서 다시 확인해야 함을 의미합니다).

저는 AngularJS와 ASP.NET MVC가 좋은 커플이 아니라고 솔직하게 생각합니다. 하지만, 그게 다야! ASP.NET MVC 사이트와 웹 API가 다른 서버에있을 수 있습니다.

MVC 응용 프로그램에서 인증 할 수있는 순간, 웹 API에서 인증을 "통과"할 수 없습니다. ASP.NET ID의 기본 코드를 사용하고 있습니다.

그래서
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); 

, 어떻게 내가 asp.net의 MVC에 인증 된 후 "자동으로"웹 API에서 인증 할 수 있습니다 : 그래서, 내가 가진 내 startup 클래스를 메신저?

내가 이미지를 업데이트 한

UPDATE 주셔서 감사합니다. 현재 MVC 응용 프로그램에서 일부 요청을하고 있습니다. 그러나 이러한 요청에는 인증이 필요하지 않습니다. angularjs에서 도착한 다른 요청이 있으며 여기에는 인증이 필요합니다. 이 순간 나는 MVC 응용 프로그램에서 사용자를 인증합니다.

답변

0

나는이 바로 다음에 문제에 대한 아주 간단한 해결책이있다.

사용자는 MVC 응용 프로그램에서 인증됩니다. 즉, MVC 컨트롤러 및 동작 메서드에 대한 호출이 보호되고 성공적으로 인증되었습니다.

MVC 앱 내에서 WEB API에 대한 요청을하고 있습니다.

웹 API는 들어오는 요청으로부터 어떻게 든 리소스를 보호해야하며 MVC 앱만 이러한 요청을 담당해야한다는 점을 감안할 때 WEB API 내에 클라이언트 비밀 OAuth 플로우를 구현해야합니다.

MVC 앱을 WEB API의 소비자로 등록하는 것으로 생각하십시오.

귀하의 MVC 응용 프로그램에서 웹 API로 전화를 걸 때 클라이언트 ID와 귀하의 웹 API가 리소스를 제공하기 전에 확인하는 비밀 정보를 제공합니다.

웹 API의 관점에서 볼 때 사용자가 누구인지 신경 쓰지는 않지만 리소스에 액세스하려는 응용 프로그램에만 신경을 씁니다.

응용 프로그램에서 암호를 제공 할 수없는 경우 액세스하지 못합니다.

* 당신의 웹 API를 공개 직면하지 않고 자원에 대한 인증 된 액세스를 필요로하는 시나리오에서 EDIT *

, 클라이언트 브라우저가없는 API에 직접 이야기해야한다.

토큰 기반 인증을 사용할 수 있습니다. 여기서 토큰 엔드 포인트에 의해 일단 인증되면 클라이언트 브라우저는 API에 대한 각 요청의 헤더에 전달 토큰을 전달합니다.

그러나 액세스 토큰을 브라우저에 전달하면 보안에 좋지 않다고 생각됩니다.

그래서 나는 클라이언트 브라우저가 MVC 응용 프로그램에 대한 호출을 수행 할 때만 호출을 처리 할 수 ​​있고 액세스 토큰이 가로 챌 수없는 서버에서 다시 호출 할 것을 권장합니다.

+0

안녕하세요 @Derek ... 당신은 부분적으로 맞습니다 : MVC 앱에서 컨트롤러가 보호되어 있고 성공적으로 인증되었습니다. 하지만 내 웹 API는 사용자가 인증되었는지 신경 써야합니다! 그래서, 귀하의 웹 API의 소비자로 귀하의 MVC 애플 리케이션을 등록 충분하지 않습니다 – Ciccio

+0

무엇이 웹 API를 호출 무엇입니까? MVC app ...의 범위를 넘어서서 동작 메소드에서 호출 되었습니까? 아니면 AngularJS를 통해 클라이언트 브라우저에서 API로 요청을 보내고 있습니까? 귀하의 다이어그램은 그렇지 않은 것으로 제안합니다. – Derek

+0

상황에 따라 다릅니다 ... 프런트 엔드와 백 엔드가 동일한 시스템에있는이 순간에 AngularJs는 웹 API를 직접 호출합니다. 백엔드가 외부에서 볼 수없는 서버로 이동하는 순간에 angularJs는 MVC를 통해 웹 API를 호출합니다. 이 순간에, 당신 말이 맞아요, 제 다이어그램이 잘못되었습니다 ... (나는 그것을 바로 잡습니다) – Ciccio