2017-10-27 15 views
3

PreAuthenticate를 사용하여 사용자의 임시 위장을 관리자 용 클라이언트 응용 프로그램에 제공하는 IdentityServer3의 포트 코드를 작성하려고합니다.Idenity Server 4 IAuthorizeInteractionResponseGenerator의 추가 요청 삽입

here에있는 스레드 다음에 나는 사용자 지정 IAuthorizeInteractionResponseGenerator에서 ProcessInteractionAsync를 재정의합니다. 위대한 작품과 나는 모든 일을하지만, 클라이언트 응용 프로그램에 다시 요청 될 추가 요청을 추가 할 수 없으므로 이것이 가장 된 id_token임을 알 수 있습니다. 내 재정의 할 때 Subject on ValidatedAuthorizeRequest를 대체 할 때 가장을 시작한 사용자를 지정하는 추가 클레임을 추가하지만이 클레임은 id_token 또는 액세스 토큰에서 처리되지 않습니다. 내 재정의 :

클라이언트가 요청한이 특수 클래임의 범위를 추가했지만 아직 포함되지 않았습니다. 나는 분명히 내가 여기에서 놓치고있는 무엇인가 명백하다고 느낀다, 나는 토큰 중의 1 개에 여분의 요구를 어떻게 추가해야 하느냐? 또는 가장을 시작한 고객에게 신호를 보내는 더 좋은 방법이 있습니까?

답변

0

그래서이 요구 사항을 해결하기 위해 Identity Server 3에서 수행 한 경로와 약간 다른 경로를 사용했습니다. Identity Server에 사용자 이름을 추가하는 대신 클라이언트에서 가장을 시작한 사용자의 사용자 이름을 임시 쿠키로 저장합니다. 그런 다음 AuthorizationCodeReceived 알림에서 쿠키 값을 확인하고 거기에 생성 된 주체에 클레임을 추가합니다.

Identity의 클레임을 추가하는 것만으로는 충분하지 않지만 모든 주요 보안 검사가 여전히 발생하고 누가 가장 된 사용자인지를 알고 싶었던 항목이 쿠키없이 실패하면 작동합니다. 다른 사람이이 문제를 발견하고 신원 확인 서버에 소유권 주장을 추가하는 방법을 알아 낸 경우 응답을하고 답변을 제공합니다.