2016-10-14 7 views
0

2 개의 끝점 A와 B가 포함 된 웹 API를 개발 중이며 A에 BasicAuthentication을 사용하고 B에 사용자 지정 유효성 검사를 사용해야합니다. 코드를 분할하지 않으려 고합니다. 이 개 프로젝트에 그 동안 나는이 파이프 OWIN을 사용하고 있습니다 :2 개의 파이프 라인이 있고 각기 다른 인증을 사용하는 웹 API

 app.Map("/api/A", basicAuth => 
     {     
      basicAuth.UseBasicAuthentication(container); 
     }); 

     app.Map("/api/B", idTokenAuth => 
     {     
      idTokenAuth.UseBearerAuthentication(container); 
     }); 

내가 경험하고 문제는 인증 후 항상 HTTP 해당 컨트롤러와 반환에 리디렉션되지 않습니다/1.1 404 찾을 수 없습니다.

팁이 있습니까?

+1

여러 개의 파이프 라인으로 작업 할 때 유용하다는 것을 알게되었습니다 - [이 기사를 확인하십시오] (http://www.strathweb.com/2016/05/running-multiple-asp-net-web-api-pipelines-side- by-side /) – inan

답변

1

이후에는 app.UseWebApi가 있다고 가정합니다. 여기에서 Map을 사용하는 데있어 문제는 부모 파이프 라인이 완료되면 다시 연결되지 않는다는 것입니다 (IIS/MVC로 넘어가더라도). 여기에 비유은 ... 당신이 원하는

은 다음과 같습니다

if (path.startswith("/api/a")) { DoBasicAuth(optionsA); } if (path.startswith("/api/b")) { DoBasicAuth(optionsB); } DoWebApi();

그러나지도 실제로하는 일은 다음과 같습니다

if (path.startswith("/api/a")) { DoBasicAuth(optionsA); return; } if (path.startswith("/api/b")) { DoBasicAuth(optionsB); return; } DoWebApi();

위브 다른 UseWhen 패턴으로 올부터 따라 할 수는 있지만 원본을 복사 한 다음 다시 포트해야합니다. https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.Http.Abstractions/Extensions/UseWhenExtensions.cs

+0

당신 말이 맞아, 그게 내 문제 야. 나는 링크에서 예제로 작동하도록 만들지는 못했지만, 오인 (owin)의 작동 방식에 대해서도 더 읽었습니다. 내가 원하는 (2 가지 인증 방법) 목적을 위해 2 가지 인증 방법을 구현하고 동일한 파이프 라인에 추가하고 수동 AuthMode를 사용하여 요청을 처리 할 수 ​​있지만 다시 컨트롤러로 리디렉션을 놓칠 수 있습니다! – Bonomi