4

우리는 다른 도메인의 .NET Web API에 구현 된 API와 통신해야하는 AngularJS 프레임 워크를 사용하는 단일 페이지 응용 프로그램을 사용합니다.MVC FormsAuthentication을 사용한 .NET Web API의 인증

이 API는 .NET 웹 API로 구현

문제. API 액세스를 위해 사용자를 인증하기 위해 MVC 단일 페이지 응용 프로그램 템플릿을 구현했습니다. FormsAuthentication을 사용하여 API에 대한 액세스 권한을 부여합니다.

우리는 Fiddler를 사용하여 디버깅했습니다. 브라우저에서 인증을 직접 요구하는 API 컨트롤러를 방문했을 때 사용자가 실제로 인증되었는지 확인할 수있었습니다. 의심되는 XMLHttpRequest를 수행했을 때 헤더에 인증 쿠키가 전송되지 않았습니다.

FormsAuthentication을 사용하여 XMLHttpRequests를 통해 .NET 웹 API에 액세스 할 수 있습니다.

하나의 제안 된 솔루션은 .NET Web API와 MVC간에 세션을 공유하는 것이 었습니다. .NET Web API와 프로젝트의 MVC 부분을 어떻게 쉽게 유지할 수 있습니까?

매우 RESTful하지는 않지만이 문제에 대한 빠른 해결책이 필요합니다.

PS! FormsAuthentication은 [Authorize] 특성을 사용하여 .NET Web API 컨트롤러와 함께 작동합니다. 컨트롤러가 XMLHttpRequests에 액세스 할 수 없다는 것입니다. 피들러의

스크린 사용 XMLHttpRequest의 요청은 브라우저에서 테스트하는 인증 제어기 Directly in the browser

스크린 수행 피들러의

XmlHttpRequest

Authentication controller

+0

웹 API가 다른 도메인에서 호스팅됩니까? 쿠키를 공유하려면 같은 도메인에 있어야합니다. –

+0

단일 페이지 응용 프로그램이 API와 다른 도메인에 있습니다. 그러나 웹 API와 MVC 프로젝트는 동일한 도메인에 있습니다. –

+0

그게 문제 야. MVC 프로젝트가 웹 API와 동일한 도메인에 있더라도 상관 없습니다. ajax 호출을 수행하는 클라이언트 응용 프로그램은 다른 도메인에서 실행되므로 쿠키를 전달하지 않습니다 –

답변

0

이것은 CORS 요청입니다. Microsoft.AspNet.WebApi.Cors 라이브러리를 사용할 수 있습니다.

config.EnableCors("*","*","*"); 

View this for detail :

은 그냥 ASP.NET 웹 API에 CORS를 사용하는 webapi config에 한 줄을 추가해야 할 것.