2013-05-21 2 views
8

나는 asp.net mvc web api 응용 프로그램을 만들고 멤버쉽 작업을 수행하는 방법을 모르고있다. 나의 현재 프로젝트에서역할 제공자/회원 자격? 어떻게 asp.net 웹 API에?

나는 Users Table하고 너무 많은 짐을 가져오고 내가 (내 데이터베이스를 설계하는 방법을 맞지 않는 한 내가 asp.net 회원을 사용하고 있지 않다 Role Table

내 자신의 확신 내가 할 수있는가에 그것은하지만 그것은 단지 많은 일을 보인다)

user많은 역할을 가질 수 있으며, role많은 사용자을 가질 수 있습니다.

EF를 사용하여 데이터베이스에 대한 거의 모든 호출을 수행하고 있습니다.

지난 프로젝트에서 나는 내 자신의 데이터베이스를 호출하고 사용자가 해당 컨트롤러/동작 방법에 허용 된 역할을 제대로 수행했는지 확인하기 위해 내 자신의 Authorize Attribute을 만들었습니다.

어떤 회원 공급자도하지 않기 때문에 나는 User.IsInRole과 같은 내장 함수 중 일부를 놓쳤다. 나는 여전히 User.Identity.Name을 사용할 수 있었지만 내가 설정 한 쿠키 때문이라고 생각한다.

asp.net mvc 4/web api에서 지금 가장 좋은 방법은 무엇입니까?

Google 검색 중 'SimpleMembership'을 찾았지만 아직 많이 읽지는 ​​않았습니다.

사용자 인증을받은 경우 내 노트에 User.Identity.Name을 (를) webapi와 함께 사용할 수 있습니까?

답변

4

여기는 article that describes how to create a custom authorize attribute for Web API's using SimpleMembership입니다. 매우 유연하고 사용하기 쉽지만 SimpleMembership을 사용할 필요가 없습니다. 이 기사에서 동일한 개념을 사용하고 서비스가 특정 사용자가 역할에 있는지 확인하고, 사용자를 로그인 및 체크 아웃하고, 인증되었는지 확인할 수있는 경우 멤버십 서비스를 대신 사용할 수 있습니다.

서비스가 인증되었는지 확인하지 않으면 User.Identity.IsAuthenticated를 사용할 수 있으며 User.Identity.Name을 사용하여 현재 로그인 한 사용자 이름을 가져올 수 있습니다. 사용자가 로그인 할 때 서비스가 Thread.CurrentPrincipal을 올바르게 설정한다고 가정하면 HttpContext.Current.User를 설정하는 것이 좋습니다. 물론 SimpleMembership을 사용하면 걱정할 필요가 없습니다.

이 사용자 지정 특성은 API를 공개하는 경우 양식 인증과 기본 인증을 모두 지원합니다. 승인되지 않은 경우 Forbidden 및 인증되지 않은 경우 Unauthorized라는 HTTP 상태 코드를 반환한다는 점에서 컨트롤러에서 사용되는 authorize 속성과 다릅니다. 로그온 페이지로 리디렉션하는 대신

0

사용자 지정 멤버 자격 공급자를 작성하고 사용할 메서드 만 구현할 수 있습니다. 지금까지 User.IsInRole에 관한 한 RoleProvider 클래스를 상속하고 web.config에 등록하여 사용자 지정 역할 공급자를 작성할 수 있습니다.

그리고 내장 기능을 사용하고 싶지 않은 경우 User.IsInRole 대신 MyService.IsInRole을 쓰는 대신 사용하지 마십시오. 커스텀 프로 바이더를 롤에 넣고 내장 함수를 사용하거나 단순히 그것을 처리 할 서비스 계층을 작성하길 원하는지 여부는 개인적인 취향에 달려 있습니다. 나는 선택이 당신이 고려해야하고 프로젝트의 특성과 관련이있는 많은 요소들에 달려 있다고 생각합니다. 예를 들어 미래에 다른 외부 개발자가이 프로젝트에서 작업하게하려는 경우 맞춤 멤버십 및 역할 제공 업체를 선택하는 것이 현명 할 것입니다. 그 이유는 개발자가 사용자 정의를 배우지 않고이 API에 대해 더 잘 알고 있기 때문입니다 서비스 계층.

+0

User.Identity.Name 어때 그게 asp.net webapi에서 설정 되나요? 이전 mvc 3 응용 프로그램에서이 사용자 지정 권한 부여 특성을 다음과 같이 사용했습니다. httpContext.User.Identity.Name 및 그런 다음 해당 이름 가진 내 서비스 계층을 사용하여 해당 사용 권한을 확인합니다. httpContext.User.Identity.Name을 쿠키로 설정했다고 생각한대로 사용할 수 있습니까? – chobo2

+0

예, 사용자 정의 권한 부여 속성을 가질 수 있고 해당 사용자에게'Thread.CurrentPrincipal'을 설정할 수 있습니다. 기본 인증을 사용하여 멤버 자격 공급자를 사용하는 샘플 구현을 살펴보십시오. http://stackoverflow.com/a/11536349/29407이 예제에서는 사용자 지정 위임 처리기를 사용했지만 권한 부여 필터를 사용할 수 있습니다. 뿐만 아니라. –

+0

매우 좋습니다. 그래도 몇 가지 질문이 있습니다. 왜 비동기입니까? 왜 처리기를 등록해야합니까? (내가하지 않았고 User.Identity가 채워졌지만 비동기로 만들지 못했습니다) 왜 역할에 액세스하지 못하는지 채 웁니다. – chobo2