2016-06-06 1 views
4

동일한 프로젝트에 Web API 및 MVC 5가 있습니다. 즉, 웹 API는 베어러 토큰 보호 (하지만 난 SuppressDefaultHostAuthentication 라인을 주석, 그래서 쿠키 MVC로 인증하고 때 브라우저에서 API에 액세스 할 수 있습니다)입니다MVC 컨트롤러 (쿠키 인증)에서 웹 API를 호출

이제 미안은 MVC 컨트롤러에서 API에 액세스하려고 토큰을 보내지 않고 SuppressDefaultHostAuthentication을 해제 할 수 있습니까? 그 불가능하면

HttpClientHandler handler = new HttpClientHandler() 
{ 
    PreAuthenticate = true, 
    UseDefaultCredentials = true 
}; 

using (var client = new HttpClient(handler)) 
{ 
    client.BaseAddress = new Uri("http://localhost:11374/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    var response = client.GetAsync("api/MyApi").Result; 
    if (response.IsSuccessStatusCode) 
    { } 
}  

, 어떻게 그 문제를 처리하는 가장 좋은 방법입니다

성공 (401 오류)없이 것을 시도?

답변

3

WebApi는 REST를 준수하며, 그 중에서도 요청에 상태가 없음을 요구합니다. 즉, WebApi 또는 모든 REST 호환 API에는 쿠키, 세션 등과 같은 개념이 없습니다. API에 대한 각 요청에는 모두 정보를 포함해야 요청을 처리 할 수 ​​있습니다. 따라서 인증이 필요한 엔드 포인트가있는 경우 에 액세스 요청을 인증해야합니다. 기간. 무기 토큰을 통해 인증을 수행하는 경우 은 무기명 토큰을 번으로 통과해야합니다.

2

WebAPI와 MVC 응용 프로그램이 같은 프로젝트에 있기 때문에 당신이 각각의 방법에 액세스 할 수 HTTP를 통해 이동 및 위해 요청을 할 필요가 없습니다 - 그들은 이웃 :

당신이야 WebAPI를 일반 클래스로 취급하고 MVC 컨트롤러에서 인스턴스화 할 수 있습니다. 그런 다음 애플리케이션의 다른 객체와 마찬가지로 인스턴스의 메소드를 호출합니다.

그러나 HTTP를 통한 요청을 활용하여 액세스하는 경우 WebAPI가 설계된 토큰 및/또는 기타 보안 메커니즘을 피할 수 없습니다.

+0

기술적으로는 정상적인 클래스와 같은 컨트롤러를 인스턴스화 (요청 - 파이프 라인을 거치지 않고)하면 '권한 부여'와 같은 일부 특성을 처리하기 때문에 (요청 - 파이프 라인의 컨텍스트에서 작동하기 때문에) . 그러나 이런 방식으로 작업을 수행하면 작업에서 인증 (즉, '사용자')에 의존하는 경우 문제가 발생할 수 있습니다. –

+5

웹 API 작업의 코드를 클래스 라이브러리로 분석하는 것이 훨씬 나을 것입니다. 클래스 라이브러리로 웹 API와 MVC 프로젝트 모두가 요청 파이프 라인 외부에서 직접 웹 API를 사용하는 대신 활용할 수 있습니다. –

관련 문제