2

WebSite (MVC 4)와 WebService (Web API)가 있습니다. WebSite는 인증 쿠키를 가지고 있으며이를 해독하여 WebSite 서버 측 코드가 서비스를 호출 할 때 보안 토큰을 WebService로 전송합니다. 그건 잘 작동합니다.Ajax 용 웹 사이트와 서비스간에 인증을 공유하는 방법

그러나 WebSite에는 WebService를 직접 호출하고 싶은 JavaScript가 있습니다. MachineKey 및 Auth 정보를 공유하려고 시도했지만 쿠키가 WebApi를 통해 전송되지 않습니다.

내 폴백은 WebSite를 통해 모든 호출을 WebService로 라우팅하는 것입니다. 그러나 그것은 추하고 느립니다.

아이디어가 있으십니까?

+1

WebApi와 사이트가 동일한 도메인에 호스팅되어 있습니까? –

+0

당신은이 토큰을 요청 헤더에 붙일 수 없다는 말입니까? –

+0

예. 하지만, 이제는 동일한 도메인을 사용하는 것으로 돌아갔습니다. 그래서, 대린, 그 대답을하고 싶다면 받아 들일 것입니다. –

답변

1

정답은 Darin 's입니다. 서비스 사이트와 웹 사이트간에 로그인 쿠키를 공유하려면 둘 다 동일한 도메인에 있어야합니다. 예 : 서비스 사이트는

http://svc.mysite.com 

에서있을 수 그리고

http://www.mysite.com 

그런 다음 브라우저가 두 사이트가 동일한 쿠키를 공유 할 수있는 웹 사이트가 될 수 있습니다.

다른 대안은 사이트를 서비스 사이트에 인증하고 자바 스크립트에 전달할 수있는 종류의 토큰을 얻는 것입니다. 그러나 HTTPS를 사용하지 않는 한 토큰을 "명확하게"사용할 수 있으므로 매우 안전하지 않습니다.

최종 메커니즘 (그리고 내가 생각하는 가장 일반적인 해결책)은 모든 API 액세스를 웹 사이트를 통해 라우팅하는 것이지만, 이는 많은 경우 이상적이지 않습니다.

관련 문제