2013-02-22 1 views
1

주어진 다음의 자 :웹 클라이언트 사이의 클레임 기반 보안, ASP.Net MVC 4 ASP.Net WebAPI

브라우저 기반 클라이언트
ASP.Net MVC 4 웹 응용 프로그램
ASP.Net 웹 API 서비스
보안 토큰 서비스 (STS) 즉 Thinktecture IdentityServer
:

내가이 작업과 유사한 흐름을 좀하고 싶습니다 (주 웹 응용 프로그램 및 WebAPI 서비스가 다른 상자에 살고) :

사용자가 웹 응용 프로그램을 탐색 할 때 응용 프로그램이 요청에서 유효한 토큰을 보지 못하고 STS로 인증되도록 사용자를 리디렉션합니다. 사용자가 STS에 로그인하고 인증이 성공하면 WebApp로 다시 리디렉션됩니다. 웹 애플리케이션은 유효한 토큰을보고 사용자 액세스 권한을 부여합니다. 사용자가 WebAPI에 대한 서비스 호출이 필요한 웹 애플리케이션에서 작업을 시도합니다. 웹 애플리케이션은 서비스 요청시 사용자 토큰을 전달합니다. WebAPI 서비스는 토큰을보고 액세스를 허용하지 않고 오류를 반환하거나 사용자를 대신하여 요청을 승인하고 결과를 반환합니다.

또한 클라이언트가 AJAX 호출을 통해 WebAPI 서비스에 직접 서비스를 요청할 수 있기를 바랍니다.

지금까지 웹 응용 프로그램을 STS로 리디렉션하고 다시 돌아 오는 흐름을 얻을 수 있지만 웹 응용 프로그램에서 웹 API 서비스로 토큰을 전달하는 방법은 무엇입니까?

또한 AJAX 호출에서 토큰을 전달하는 JavaScript 클라이언트를 얻으려면 어떻게해야합니까?

답변

1

SAML로 작업하는 경우 즉시 처리 할 수 ​​있습니다.

웹 사이트 로그인은 SAML 토큰을 반환하고 saveBootstrapContext 기능은 나중에 사용할 수 있도록 토큰을 저장하며 웹 API로 전달할 수 있습니다.

웹 API에서 SAML을 사용하여 thinktecture identitymodel을 사용할 수 있습니다. AJAX 호출의 경우 JS에서 SAML 토큰을 검색하여 승인 헤더에서 웹 API로 전송하는 방법을 제공하십시오.

이것은 최적이 아닙니다. 그러나 JWT를 수행하는 방법 (선호되는 방법) - 일부 비트가 현재 누락되었습니다 (예 : IdSrv는 대칭 시그니처에 대한 지원 만하고 JWT 핸들러는 부트 스트랩 컨텍스트, MS JWT 핸들러 및 대칭 시그니처를 통해 지원하지 않습니다. config도 문제가됩니다).

저는이 문제를 해결하기 위해 노력하고 있습니다. 그러나 현재이 시나리오에는 다소 거친 부분이 있습니다.

+0

또는 쿠키를 사용하십시오. – flup

+0

음. 물론 쿠키는 없습니다. 다양한 구성 요소는 서로 다른 상자 (잠재적으로 다른 도메인 - 현재는 아니지만 - 아마도 내일)에 있습니다. – leastprivilege

0

두 서비스가 동일한 도메인에있는 경우 쿠키를 사용할 수 있습니다.