2010-03-08 5 views
3

SaaS 애플리케이션의 일반적인 문제처럼 보이지만 여기 어디서나이 질문을 보지 못했습니다.ASP.NET MVC 하위 도메인 별 승인

폼 인증과 함께 ASP.NET MVC를 사용하고 있습니다. 논리를 처리 할 사용자 지정 멤버 자격 공급자를 구현했지만 한 가지 문제가 있습니다. 아마도이 문제는 내 시스템의 정신적 인 그림에 있습니다.

많은 SaaS 앱에서와 마찬가지로 고객은 계정을 생성하고 현재 존재하는 유일한 것으로 보이는 방식으로 앱을 사용합니다 (항목, 사용자 등만 표시). 실제로 URL에 표시된 고객에 따라 데이터를 표시하는 일반 컨트롤러 및 뷰가 있습니다. MembershipProvider.ValidateUser와 같은 것을 호출 할 때 User 객체에있는 사용자의 고객 소속에 액세스 할 수 있습니다. 사용자와 동일한 고객에 대한 데이터 요청인지 여부를 비교하기위한 요청 컨텍스트가 없습니다. 예를 들어

한 회사는 ABC가 abc.mysite.com 간다라는

또 다른 회사는 XYZ가 ABC 사용자가

를 호출하면

을 xyz.mysite.com 간다라고

http://abc.mysite.com/product/edit/12 

ProductController의 Edit 메서드에 [Authorize] 특성을 사용하여 사용자가 로그인되어 있으며이를 수행 할 수있는 충분한 권한이 있는지 확인합니다.

은 같은 ABC 사용자는

http://xyz.mysite.com/product/edit/12 

내가 그 전화의 맥락에서 그 유효성을 검사 싶지 않을 것이다에 액세스하려고합니다. MembershipProvider의 ValidateUser에는 사용자에 대한 정보가 있지만 요청에 대한 정보는 없습니다. 나는 사용자가 ABC 출신이라고 말할 수 있지만 코드의 해당 지점에서 XYZ에 대한 요청임을 알 수 없다.

어떻게 해결해야합니까?

+0

xyz에 갈 때 어떤 행동을 원하십니까? ...? 올바른 사이트로 리디렉션 하시겠습니까? 액세스가 거부 된 페이지입니까? 다른 것? 이 경우 '12'는 xyz 사이트의 누군가에게 고유 한 ID가 아니므로 항목 12를로드 할 때 어쨌든 액세스를 거부하게됩니까? 사용자가 올바른 도메인에 있다는 별도의 확인을 원하는 것처럼 들리겠습니까? –

+0

나는 그가 시도하면 어떻게 해야할지 생각하지 않았다. 나는 단지 고객이 한 고객이 다른 고객으로부터 데이터를 얻는 것을 파악하기 위해 높은 수준으로 가고 싶다는 것을 알고 있습니다. 지금 당장, 내 논리는 단지 그가 일반적으로 조치를 취할 수 있는지 여부를 테스트 할 것이지만 고객 계정에 대한 조치를 취할 수 있는지 여부는 테스트하지 않을 것입니다 (적어도 [Authorize] 코드에서). –

답변

3

권한 부여 요청과 같은 스레드에 있기 때문에 당신이 검사에 의해 하위 도메인을 결정할 수 : 각 호출에 이렇게

System.Web.HttpContext.Current.Request.Url.DnsSafeHost 

확실히 위해 일을 계속 것이다, 그러나이 권한 부여 동안 순수 화장품 검사입니다 . 인증하는 동안이 정보를 살펴 보는 것이 좋습니다. XYZ를 요청하고 XYZ를 인증하는 것을 알고 나면 XYZ로 액세스 할 수있는 기능/데이터를 제어하는 ​​것에 대한 권한 부여 만 고려해야합니다. XYZ로부터의 존재는 그 시점의 CurrentUser의 일부로 저장되어야합니다.

+0

ABC 사용자가 ABC에 인증 한 다음 브라우저에 XYZ URL을 붙여 계속하거나 다른 메커니즘으로 중지시킬 수는 없습니까? –

+0

아니요. 도메인은 숫자로 해석되는 이름 자체 일뿐입니다.그것은 IP 주소의 추상화입니다. 사용자를 인증 할 때 하위 도메인 xyz 만 신경 써야합니다. 사용자 Bob이 xyz.domain.com에 들어 왔음을 알게되면 XYZ에 대한 비밀번호를 입력하십시오. 인증하면 XYZ 회사를 가리키는 것으로 사용자 컨텍스트를 저장합니다. 앞으로 XYZ에서 Bob이라는 것을 알기 때문에 하위 도메인을 abc로 변경하면 문제가되지 않습니다. 그는 그것을 다른 것으로 바꿀 수는 있었지만, 그 시점부터는 그를 Bob/XYZ로 인증했습니다. –

+0

다른 하위에 다른 앱을로드하지 않는 한 하위 도메인은 동일한 IP 주소를 추상화 한 것입니다. 난 당신이 하나의 웹 애플 리케이션을 가정하고 인증의 일환으로 하위 도메인을 해결합니까? –

관련 문제