2016-07-12 4 views
0

System.IdentityModel을 사용하고 있으며 내 MVC 응용 프로그램 인증에 대한 인증 기반 인증을 사용하고 있습니다.솔루션의 각 애플리케이션마다 FedAuth 쿠키를 고유하게 만드는 방법은 무엇입니까?

var token = new SessionSecurityToken(MyCustomClaimsPrincipal.GetInstance(username, roles,claims)   );  
    token.IsPersistent=rememberMe; 

    var sam = FederatedAuthentication.SessionAuthenticationModule; 
    sam.IsReferenceMode = true; 
    sam.WriteSessionTokenToCookie(token); 

모든 것이 잘 작동하지만 같은 솔루션이 다른 응용 프로그램에서 정확히 같은 방법을 사용할 때 문제가 : 로그인 페이지에서 사용자 이름과 비밀번호를 확인 후 나는 FedAuth 쿠키 (들)을 생성하기 위해 다음과 같은 방법을 사용 다른 도메인에 게시 될 예정입니다. 하지만 localhost FedAuth 쿠키는 서로 충돌합니다. 하나의 앱에 로그인하면 다른 앱에서는 쿠키가 유효하지 않으므로 다시 로그인해야합니다.

사실 한 번에 하나의 앱만 사용할 수 있습니다. 로컬 호스트에만있는 것으로 생각하고 게시 후 다른 도메인에는 문제가 없습니다. 하지만 FedAuth 쿠키를 하나의 솔루션으로 각 응용 프로그램마다 고유하게 만들 것을 권장합니다. 가능한가? 그리고 어떻게? 아마도 SessionSequrityToken의 생성자에 Context 또는 ContextId가있을 수 있습니다. 그러나 그것에 대한 모범을 찾지 못했습니다. 컨텍스트와 contextId 매개 변수로 보낼 대상을 모르겠습니다.

답변

1

sessionAuthenticationModule에는 cookiehandler (https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.web.sessionauthenticationmodule_members.aspx)라는 멤버가 있습니다. cookiehandler에는 쿠키의 이름 인 이름이 있습니다. https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.web.cookiehandler_members.aspx

당신은 또한 당신이 설정에서이

+0

가 대단히 감사합니다 도움이 <system.identityModel.services> <federationConfiguration> <cookieHandler requireSsl="false" name="yourcookienamehere"/> ...

</system.identityModel.services>

희망하고있는 일을 할 수 있습니다. 그것은 작동하지만 또 다른 문제가 있습니다. (로컬) 로그인되어있는 동안 솔루션을 빌드 할 때마다 쿠키가 더 이상 유효하지 않으므로 다시 로그인해야합니다. 왜 그런지 알아? 어쩌면 세션의 쿠키 만료 시간을 설정해야하지만 불가능합니다. 설정하지 않으면 기본 만료 시간이 12 시간입니다. – user3569123

+1

나는 이것이 세션이 "서버"에서 만료되었다는 사실과 관련이 있다고 생각한다. 이전 세션이 더 이상 웹 서버에 존재하지 않으므로 세션 보안 토큰이 더 이상 유효하지 않습니다. 나는 이것이 정상적인 행동이라고 생각한다. STS가 로그인 상태를 유지하기로 결정할 수 있습니다.이 경우 STS의 로그인 페이지로 약간 리디렉션 한 후 로컬 호스트 응용 프로그램이 자동으로 새 보안 토큰을받습니다. 어떤 STS를 사용합니까? –