Basic Auth를 사용하여 WebApi를 멋지게 사용합니다. 그리고 Forms Auth를 사용하여 MVC 사이트를 멋지게 만듭니다. 하지만 여기 잡을 :기본 인증을 사용하는 Forms Auth 및 WebApi가있는 ASP.NET MVC
클라이언트 X는 연락처 및 제품의 번호와 전용 데이터베이스가 있습니다. MVC 사이트는 자신의 연락처 (Forms Auth를 통해)에 로그인하고 제품 주문을 할 수있는 ({clientId} 라우팅을 통한) 전용 사이트입니다. 주문을하려면 담당자가 로그인해야합니다.
제품은 클라이언트의 데이터베이스에 기록 할 WebApi를 주문합니다.
하지만 WebApi는 기본 인증을 사용하여 주문한 담당자가 아닌 클라이언트의 유효성을 검사하므로 모든 요청은 401 - Unauthorized입니다.
나는 여기에 많은 게시물에 의해 제안 된 것처럼 ThinkTecture를 체크 아웃했지만 WebApi에서 Forms Auth를 허용하지 않기 때문에 필자에게 필요한 것은 얻을 수 없다. WebApi에서 클라이언트 데이터베이스의 연락처를 인증하고 싶지 않습니다. WebApi에서 클라이언트를 인증하려고합니다.
비슷한 시나리오를 경험 한 사람이 있습니까? 그리고 눈에 띄게 분명한 사실을 놓친 사람이 있습니까? 아마도 사이트에서 Forms와 Basic을 모두 구현해야합니까?
내가 사이트에서 만들고있어 매우 표준 API 호출 (사용자 이름과 암호는 클라이언트의 아닌 상대의) : 나는 별도의 테스트 클라이언트를 설정하고 동일 할 경우
var clientId = new Guid(RouteData.Values["clientId"].ToString());
var baseUrl = ConfigurationManager.AppSettings["ApiBaseAddress"];
var authHeader = Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", _shoppingCartSettings.UserName, _shoppingCartSettings.Password)));
var requestUrl = String.Format("api/{0}/inventory", clientId.ToString());
var httpWebRequest = WebRequest.Create(baseUrl + requestUrl);
httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, "Basic " + authHeader);
httpWebRequest.Method = "GET";
httpWebRequest.Accept = "application/json";
httpWebRequest.ContentType = "application/json";
try
{
using (var httpWebResponse = httpWebRequest.GetResponse())
{
// we never get here because of a 401
}
}
catch (WebException ex)
{
using (var httpWebResponse = ex.Response)
{
// we always get here
}
}
전화를 걸면 작동합니다./
그래, 그들은 분명히 자신의 configs와 별도의 가상 디렉토리에 있습니다. web.configs에서 MVC 사이트가 "Forms"로 설정되고 WebApi가 "None"으로 설정됩니다. – McCee
올바른 방향으로 밀어 주셔서 감사합니다. 알아 냈어. – McCee