2017-01-05 3 views
0

IdentityServer3을 사용하여 SSO (Single Sign On) 솔루션을 구현 중입니다. IdenitityServer를 호스팅하는 ASP.NET 4.5.2 (MVC) 응용 프로그램이 있습니다. 로그인 한 모든 사용자를 추적하고 활동을 데이터베이스에 저장해야한다는 요구 사항이 있습니다. 그건 내 사용자 정의 정체성 서버에서 로그인 시간에, 나는 사용자 ID와 함께 발행 된 ASP.NET Identitiy 세션 ID를 기록해야합니다. 그런 다음 클라이언트 응용 프로그램 중 하나를 사용하면 사용자 정의 Identitiy Server로 신호를 전송합니다. 신호에는 ASP.NET ID 세션이 포함됩니다. 이 신호는 모든 클라이언트에서 활동을 탐지하는 데 사용되므로 사용자 정의 Identitiy Server는 사용자 세션의 유효 기간을 연장 할 수 있습니다. 이 논리는 사용자가 다른 클라이언트에 로그인하기로 결정한 경우 필요합니다.액세스 할 수있는 현재 ASP.NET ID 세션 ID가있는 IdentityServer3의 콜백

내가 직면 한 기술적 과제는 로컬 로그인 직후에 Identity Server에서 현재 ASP.NET Identitiy 세션 ID가 포함 된 위치를 찾는 것입니다.

지금까지 내가 IUserService 내가 구현할 수있는 사용자 정의에 다음과 같은 기능을 발견 : 내 사용자 지정 IUserService에서

// Summary: 
    //  This method is called prior to the user 
    //  being issued a login cookie for IdentityServer. 
    // 
    // Parameters: 
    // context: 
    //  The context. 
    public virtual Task PostAuthenticateAsync(PostAuthenticationContext context); 

을, 나는 IOwinContext을 주입했지만, 주석 상태로,이 기능은 을 호출 한 후 사용자가 IdentityServer 쿠키를 발급받습니다.

IdentityServer3의 documentation을 탐색했으며 전체 로그인이 실행 된 후 실행되는 파이프 라인에 사용자 지정 코드를 연결할 수있는 단일 위치를 찾을 수 없습니다. 나는 새로운 사용자가 현재 로그인되어 있고, 어떤 ASP.NET 식별자 세션 아이디가 그의 데이터베이스에 속해 있는지 데이터베이스에 쓸 수 있도록 그와 같은 장소가 필요하다.

답변

2

IEventService를 살펴보면 IdentityServer의 활동에 대한 강력한 유형의 활동 관련 알림을 제공합니다. https://identityserver.github.io/Documentation/docsv2/configuration/events.html

+0

세션 ID가 포함 된 유일한 이벤트는 토큰 발행 이벤트입니다. 항상 세션을 포함하도록 보장됩니까? if (evt.Name == "Identity token issued"&& evt.Details is TokenIssuedDetailsBase) {} –

+0

다른 이벤트의 세션 ID를 향상시켜야하는 경우 github 발행물 추적기에서 문제를 엽니 다. –

+0

현재 작동하지만, 항상 그럴 것인지 궁금합니다. 나는 미래에 땀을 흘리고 싶지 않다. 답변 해주셔서 감사합니다! :) –