2017-11-22 22 views
0

IdentityServer4 (사용자 정의 사용자 저장소) 및 Mvc 클라이언트 응용 프로그램으로 간단하게 설정할 수 있습니다. 클라이언트 앱의 일부 페이지가 보호됩니다. 따라서 예를 들어 사용자가/pageX를 방문하면 인증을 위해 IdentityServer로 리디렉션됩니다. 이것은 사용자가 존재할 때 잘 작동하고, 그는 로그인하고 리디렉션됩니다. 등록되지 않았다면 등록을 요청 받았고 이메일을 통해 활성화 코드를받습니다. 그 다음 그는받은 편지함으로 이동하여 활성화 링크를 클릭하고 다시 로그인 할 수 있습니다. 이제 정품 인증과 로그인 후에 원래 요청한/pageX로 리디렉션하고 싶습니다. 내 문제는 -이 시점에서 나는 어떻게 든/pageX를 포함하는 유효한 returnUrl을 가지고 있지 않습니다.IdentityServer4 - 등록 후 리디렉션

returnUrl = % 2Fconnect % 2Fauthorize % 2Fcallback % 3Fclient_id % 3DmyClientIdt % 26redirect_uri % 3Dhttp % 253A % 252F % 252Flocalhost % 253A5501 % 252Fsignin-OIDC % 26response_type % 3Did_token % 26scope : 나는 간단한 로그인 흐름에서 작동 returnUrl를 사용하여 시도 3Dopenid 2520profile % % % % 26response_mode 3Dform_post % 26nonce % 3D636469643044666440.MmZlNzFlMWYtZThhMS00ZjFlLTgyYjYtMDU5NjRmODBhZmNkMzk1MzJiZWItODY2Yy00NzYwLWE4YjQtOGU5YWU5Y2IxMDJk % 26state % 3DCfDJ8IK-YquShZdNsC5l0tQGkLIvU-_O1FbdO5RV9KrOZ9hCTixBZc-YeVLkKB2mvHkV9U42U83N7RfFCHywKjdbGRGnpfqwgG08_ip1Pt2sAqfa_sPlwYOO7fSiKUbnk2IpA1BMWvfeXNwIeFB7AMv0q0Y2z7vjCTNWawwNS6m5EM3h9V0uCpHE-1H19VPhE0OQcXmmcaNViWbdmWE14VNTH8MYQaPfE90smHtRwYtbYaYhfj-g4ziXbhN6m_R6PYni1ApazIDUBOowEq6yV9ynF91SM82gohud4Ek3juozL-A4W_dTIBZnj1C5PMmUISWl9yw_UPOvTwsCskVH2OmavgI %의 26X-클라이언트 SKU % 3DID_NET % 26X-클라이언트 버전의 %의 3D2.1.4.0)

그러나 등록 후이 반환 URL을 사용하면 상관 관계 오류 메시지가 나타납니다.

사용자가 원래 요청한/pageX로 돌아가려면 어떻게해야합니까?

답변

0

returnUrl (질문에서 샘플링 됨)은 Authorize Endpoint에서 Login/Register 페이지로 리디렉션 한 결과입니다. 실제 returnUrl을 검색하려면 IdentityServer Interaction Service을 사용해야합니다.

var context = await _interaction.GetAuthorizationContextAsync(returnUrl); 

context.RedirectUri는 사용자가 활성화 한 후 리디렉션 될 필요가있는 실제 URL (/ 페이지 X)를 개최한다.

당신은 활성화 링크에 쿼리 매개 변수에게 context.RedirectUri을 전달하고 활성화 페이지를 검색 할 수 있습니다. 활성화가 완료되면 사용자를 returnUrl으로 리디렉션 할 수 있습니다.

string activationLink = "<your activation url>?return=" + returnUrl; 

확인 내가 (질문 샘플링) 그렇게 오래 returnUrl를 사용하여 시도 무엇이 docs

+0

. 하지만 그 하나는 내게 상관 관계에 관한 약간의 오류를 준다. returnUrl = {clientapphost}/pageX를 사용하고 싶지만 ID 서버 컨텍스트에서/pageX를 가져 오는 방법을 볼 수 없습니다. – Andrei

+0

@Andrei 귀하의 질의를 처리하기 위해 제 답변을 업데이트했습니다. – naveddeshmukh

+0

컨텍스트를 확인했습니다 .RedirectUri 값은 나에게/pageX를주지 않습니다. 그것은 나에게 다음과 같은 것을 준다 : http : // localhost : 5501/signin-oidc 클라이언트 애플 리케이션의 말단 백 엔드 포인트를 추측한다. – Andrei