2010-08-12 4 views
3

상황은 이것이다 :ASP.Net 멤버쉽을 사용하면 동일한 웹 사이트에 로그인하는 데 여러 멤버쉽 공급자를 사용할 수 있습니까?

우리와 같은 현재 다른 applicationNames를 사용하여 단일 ASP 회원 데이터베이스를 공유하도록 구성하는 여러 (19) 사이트를 가지고 :

여러가있는 경우
<membership defaultProvider="Site1Membership"> 
    <providers> 
    <add 
     applicationName="/site1" 
     name="Site1Membership" /> 
    <add 
     applicationName="/site2" 
     name="Site2Membership" /> 
    </providers> 
</membership> 

내 질문은 web.config에 정의 된 공급자는 기본 공급자가 아닌 다른 사용자를 통해 로그인 할 수 있습니까?

주어진 구성에서 applicationName이 "/ site1"인 기본 공급자에 저장된 사용자는 분명히 로그인 할 수 있지만 applicationName이 "/ site2"인 리포지토리의 사용자에게도 마찬가지입니다 로그인 할 수 있어야합니다.

을 username을 둘 다 일을 나타납니다

사이트 2 : 사용자 이름 또는 site2Membership 우리는 같은 로그인시 공급자의 이름과 applicationName에 모두 사용자 이름을 앞에 추가 해본 적이

.

최종 목표는 19 개의 사이트에 별도의 사용자 및 보안 (사이트 1 사용자는 사이트 2에 로그인 할 수 없음)을 원하지만 모든 사이트의 사용자가 필요없이 로그인하고 공동 작업 할 수있는 20 번째 사이트가 필요합니다. 두 번째 사용자 이름/암호.

답변

4

그러나 사용자 정의 코드를 작성해야 할 수도 있습니다. 즉, 주어진 로그인이 속한 사용자 그룹, 즉 앱 특정 사용자 또는 "글로벌"사용자를 결정할 방법이 필요합니다. 저는 글로벌 사용자가 로그인 할 때 "G \"또는 "MyCompany \"와 같은 접두어를 사용하도록 요구함으로써 이것을 처리했습니다. 반면 일반 사용자는이 작업을 요구하지 않았습니다.

인증 측면은 실제로 매우 쉽습니다. 로그인 단추의 Click 이벤트 또는 LoginControl의 OnAuthenticate 메서드에서 사용자를 검색하고 올바른 멤버 자격 공급자 이름과 일치시켜야합니다.

MembershipProvider provider; 
if (username.Text.StartsWith("G\") then 
    provider = Membership.Providers["GlobalProvider"]; 
else 
    provider = Membership.Providers["StandardProvider"]; 

if (provider.ValidateUser(... 

복잡해지면 역할이 있습니다. SqlRoleProvider는 동일한 사용자 저장소를 사용하는 여러 응용 프로그램을 처리하도록 설계되지 않았습니다. SqlRoleProvider가 사용하는 프로 시저를 변경하여 RoleProvider의 응용 프로그램 만 사용하는 기본 특성 대신 MembershipProvider의 응용 프로그램을 사용하도록해야합니다. 또한 글로벌 사용자가 로그인 할 때 자동으로 일부 역할에 추가되는지 확인해야합니다.

+0

우리는 코드를 피하거나 사용자 정의 공급자를 작성하기를 원했지만 대답은 그 것처럼 보입니다. :( – Ragoczy

관련 문제