2013-07-14 3 views
0

데이터베이스를 공유하는 두 개의 ASP.NET MVC 웹 사이트를 구축하고 있습니다 (데이터를 공유하기 때문에). 즉, 사이트 간 로그인은 현재 공유되지 않습니다. 참고로, 나는 Hibernate (현재)에서 SQL Server와 데이터 액세스를 위해 NHibernate를 사용하고있다.ASP.NET 인증에 대한 조언 필요

현재 시스템에는 사이트, 역할, 사용자 및 권한에 대한 테이블이 있습니다. 사이트에는 사용자, 권한 및 역할 집합이 있습니다. 사용자는 많은 역할을 수행 할 수 있습니다. 역할에는 일련의 권한이 있습니다. 사용자는 사용자 이름과 비밀번호로 로그인 할 수는 있지만 모서리에 그림을 그려 넣지 않으려합니다. 나중에 Google 또는 Facebook의 로그인 정보를 사용할 수 있기를 바랍니다.

이제 사이트 확보와 관련하여 어떤 경로를 택할 지 조금 혼란 스럽습니다. 저는 여러 가지 이유로 옛날 학교 회원 및 역할 제공 업체에 매혹되지 않았습니다. 이것들 가운데서 가장 중요한 것은 제가 많은 역할을 역할로 제한하지 않을 것입니다. 사용자 액세스 권한에 따라 사물이 제한됩니다. 인증을 위해 다음과 같은 몇 가지 시나리오를 검토하고 있습니다. 1) 속성을 통해 컨트롤러 메소드를 사용하는 데 필요한 권한을 지정할 수 있기를 원합니다. 2) 사용자가 특정 역할에 있거나 특정 권한을 갖고 있는지 신속하게 쿼리하고 볼 수 있기를 원합니다.

사실, 나는 일련의 질문이 있지만, 서로 얽혀 있습니다. 첫째, 어떻게해야합니까? 사용자 정의 권한 속성일까요? 둘째, 로그인 등의 작업 흐름은 무엇입니까? 이 작업이 적절하고 안전하게 작동하는 데 필요한 단계는 무엇입니까?

나는 이것들이 일종의 멍청한 질문이라는 것을 알지만, 과거에 나는 옛 공급자의 일을하는 방식으로 과거에 얻었습니다. 나는 특별히 신경 쓰지 않으며 더 좋은 제안을 정말로 원할 것입니다. 그래서 나는 오래되었던 모든 것이 나를 위해 새롭다 고 생각한다.

+0

회원이며 역할은 그들이 우리가 필요로하는 무엇을 충분히 활용으로 큰 경우

사용자 정의 역할, 사용자 정의 MVC 속성, 또는 쿼리를 확인, 당신은 항상 [사용자 정의를 만들 수 있습니다 Membership and Roles] (http://stackoverflow.com/questions/5701673/custom-membershipprovider-in-net-4-0/5702000#5702000) 사용자가 n 개의 역할을 올바르게 수행 할 수 있다는 것을 알고 있습니까? 그래서, 만약 당신이 '컨트롤러'당 역할을 만들면, 당신이 원하는 것을 성취하기가 더 쉬울 것입니다. – balexandre

답변

0

나는 해충처럼 MS로부터 회원 서비스 제공자를 피할 수있다. .NET 2.0이 출시되었을 때 이미 구현 된 상태였으며 최근의 새로 고침이 더 좋지 않습니다.

멤버십 공급자에게 속하지 않은 역할, 사용자, ... 회원님이 직접 사용할 수 있습니다. 처리하는 httmodule를 생성위한 인증을 설정위한 인증이 필요한 모든 IIdentity에서하고 httmodule

string[] roles = new[] {"Admin", "CoolDude"}; 
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(user, roles); 

에서 파생 된 사용자입니다합니다 (Context.User.Identity에 대한 간단한 userId를가 충분)

말했다. . 그리고 이제 귀하의 mvc 컨트롤러에 단순히 게임을 재생하는 데 필요한 인증 속성을 추가하십시오! 사용자가 특정 직접 역할

if (HttpContext.Current.User.IsInRole("Admin")) { ... 
+0

멤버쉽 공급자에 대해 "잘못 구현되었습니다"라는 것이 없지만 이상적이지 않은 결정이있었습니다 (예를 들어 전역 정적 인스턴스).하지만 이들은 최악의 성가신 경우입니다. 자신의 사용자 이름/암호 관리를 구현하려고하는 사람들의 99 %는 보안을 철저히하지 않을 것이며, 자신이하는 일을 알지 못한다면 기본 제공 업체를 사용하는 것이 훨씬 더 나은 것으로 생각합니다. –

+0

어쨌든 다른 저장 장치를 사용해야 할 것입니다.내 비즈니스 레이어를 돌아 다니면서 사용자를 만들고 검증하는 일은 정말로 원하지 않는다. NHibernate가 제공하는 모든 캐싱 및 그와 같은 장점을 원한다. 나는 커스텀 제공자를 구현할 수 있다고 생각한다. 그게 여전히 최선의 아이디어인지 나는 모른다. –

+0

@WillGant - 사용자 지정 공급자를 반드시 구현하지는 않지만 사실상 대부분의 경우 사용자 지정 공급자가 잘못된 대답이라고 생각합니다. 왜냐하면 .net 멤버쉽은 재사용 가능한 일반 시스템으로 설계 되었기 때문입니다. 문제는 대부분의 사람들은 회원 자격이 자격 증명을 저장하고 유효성을 검사하는 시스템이라는 사실을 실제로 이해하지 못합니다. 그게 전부 야. FormsAuthentication 시스템뿐 아니라 역할 및 프로필 시스템도 관련이 있습니다. 이들은 모두 다른 것들입니다. 그게 핵심이야. .net은 IIdentity 및 IPrincipal 클래스를 사용하며, 그 중 자신의 버전을 구현하면 유용 할 수 있습니다. –

관련 문제