2013-02-20 2 views
0

ACS 및 내 사용자 지정 STS 공급자에 대해 RP1 및 RP2 응용 프로그램의 사용자를 인증하려고합니다. 나는 사용자가 어떤 애플리케이션 RP1 또는 RP2에서 왔는지 알아야합니다. 그것이 가능하고 어떻게 할 수 있습니까?원래 중개자 응용 프로그램 감지

나는 ACS를 사용하지 않고도 사소한 것이라고 생각하지만 ACS로 그것을 수행하는 방법.

답변

1

페더레이션 체인에서 STS는 이론적으로 이웃을 인식합니다 (이 경우 IdP는 ACS 만 인식합니다). 따라서이 작업을 수행 할 수 없습니다. 이 작업을 수행 할 수있는 공식적으로 지원되는 유일한 방법은 동일한 실제 STS를 ACS에 두 개의 서로 다른 논리 ID 공급자 (예 : http://myidp.com/rp1http://myidp.com/rp2)로 등록하는 것입니다.

그러나이 방법은 공식적으로 지원되지 않지만 실제로는 다른 방법으로 수행 할 수 있습니다. 다음은 사용자 지정 IdP에 대해 WS-Federation을 사용한다고 가정하지만 다른 프로토콜에서도 비슷한 작업을 수행 할 수 있습니다. ACS는 WS-Federation 응답의 wctx 매개 변수에 Base64UrlEncoding을 사용하여 인코딩 된 영역 및 회신 주소를 포함하여 원래 요청의 모든 데이터를 인코딩합니다. 다음과 같은 방법으로 상황을 디코딩 할 수 있습니다

SignInRequestMessage message = WSFederationMessage.CreateFromUri(Request.Url); 

byte[] bytes = HttpServerUtility.UrlTokenDecode(message.Context); 

string decodedContext = UTF8Encoding.UTF8.GetString(bytes); 

이 당신에게 영역하고 원래 RP의 주소를 회신 해 드리겠습니다 rm=<realm>&ry=<reply> 것 중 두 이름/값 쌍의 세트를 제공 할 것입니다.

위에서 언급했듯이 공식적으로 지원되지 않으며이 컨텍스트 문자열의 형식이 미래에 변경 될 수 있습니다.

+1

또 다른 방법은 ID 제공 업체 메타 데이터를 사용하여 IdP의 로그인 URL을 다운로드하여 사용자 지정 HRD 페이지를 호스팅하는 것입니다 (http://msdn.microsoft.com/en-us/library/gg185963.aspx). 이 페이지에서 RP를 식별하는 ID 공급자의 로그인 URL에 추가 쿼리 매개 변수를 추가 할 수 있습니다. –

+0

비슷한 질문에 대한 자세한 답글을 게시 : http://stackoverflow.com/questions/15097275/passing-url-parameters-from-azure-acs-to-my-custom-identity-provider/15100131#15100131 –

관련 문제