2012-01-31 4 views
5

안녕하세요, Windows Azure에서 처음 실행되는 ASP.NET MCV 3 애플리케이션을 구축하고 있습니다. 인증 및 권한 부여 계층 정보 액세스 제어 서비스를 사용하려고합니다. 기본 아이디어가있는 ACS에 대한 기사를 읽었지만 여전히 의문을 가지고 있습니다.Azure ACS - 모범 사례 구현

본인은 ACS를 사용하여 인증 과정을 하나 이상의 ID 제공 업체 (IP)에 아웃소싱한다는 점을 기본적으로 사용자 인증을 위해 다른 시스템 (즉, Microsoft Live ID)을 신뢰합니다. 기본 프로세스는 매우 간단합니다. 인증 단계에서 사용자를 "신뢰할 수있는"IP 중 하나로 리디렉션 (ACS가 수행)하여 유효한 토큰을 가진 사용자를 ACS로 리디렉션하고 결국 응용 프로그램으로 리디렉션합니다. 여기에 몇 가지 질문이 있습니다 ...

라이브 ID 계정을 가진 모든 사용자가 우리 응용 프로그램에 액세스 할 수 있기를 원하지 않기 때문에 해당 사용자의 유효성을 검사하고 사용자가 등록되어 있는지 확인하는 다른 프로세스가 필요합니다 우리의 응용 프로그램. 질문은 어디에 있습니까? ACS 또는 신청서에 기재되어 있습니다.?

나는 이것에 대한 아이디어가 있지만 올바른 방법인지는 모르겠다. 등록 단계에서 시스템 (우리의 웹 앱)은 사용자에게 어떤 IP (즉, 라이브 ID, 페이스 북 및 우리의 응용 프로그램). 그는 응용 프로그램에서 자신을 인증하는 데 사용하려고합니다. 그런 다음 사용자는 IP 시스템에서 인증 과정을 거치며 돌아올 때 사용자 이름 (IP 사용자 이름)을 DB에 저장합니다. 다음에는 인증 단계에서 해당 사용자가 우리 시스템에 등록되어 있는지 확인할 수 있습니다.

위의 이론이 맞다면 이는 앱에 있음을 의미합니다. 우리는 우리의 앱을 선택한 IP와 사용자로부터 오는 사용자 이름을 저장하기 위해 회원 공급자를 구축해야합니다. 한모금. 맞습니까? 위의 프로세스를 설계하는 가장 좋은 방법은 무엇입니까?

이제 권한 부여 및 "역할"에 대해 설명합니다. ACS와는 어떻게 작동합니까? ACS는 사용자별로 여러 역할을 관리합니까?

ACS를 사용하면 단일 사용자가 아닌 IP와 관련된 "규칙 그룹"을 여러 개 만들 수 있습니다. 이것이 올바른 경우 응용 프로그램에서 역할에 속한 사용자를 어떻게 관리합니까? 예를 들어 우리는 여러 역할을 가지고 있고 사용자는 그 역할과 연관 될 수 있습니다. ASC를 사용하여 관리 할 수 ​​있습니까?

마지막 질문은 다음과 같습니다. ACS 자체가 전체 인증 및 권한 부여 프로세스를 다루고 있습니까? 여전히 .net 멤버 자격 공급자를 사용해야합니까? 요구 사항을 충족시키기 위해 가장 좋은 방법은 무엇입니까?

귀하의 기여에 대해 감사드립니다.

답변

1

사용자 유효성 확인 프로세스는 클레임으로 수행됩니다.

ACS를 사용하여 IP를 설정하면 사용자가 인증 할 때 ACS는 IP에서 인증 된 사용자에 대한 클레임을받습니다. ACS에서 응용 프로그램으로 전달할 클레임에 대해 규칙을 구성해야합니다. 클레임을 다른 유형으로 변환하여 응용 프로그램이 기대하는 수신 클레임을 정상화 할 수도 있습니다.

ACS를 통해 역할 기반 액세스를 구현하려면 다음을 수행 할 수 있습니다.이 경우에는 ACS에서 발급 할 다른 역할에 대한 역할 만 수행하면 ACS에서받는 역할에 따라 사용자 권한을 부여하는 응용 프로그램을 구현하게됩니다.

특정 IP 입력 클레임을 역할 출력 클레임에 매핑하는 ACS 규칙을 구성 할 수 있습니다. 또한 ACS에는 이러한 규칙을 변경할 수있는 관리 서비스가있어 사용자 등록 프로세스를 구현할 수 있습니다.

ACS의 개별 클레임 규칙은 클레임을 발급하는 ID 공급자와 관련이 있지만 규칙 그룹은 관련이 없습니다. 규칙 그룹은 RP (응용 프로그램)와 연결됩니다. 규칙 그룹은 단순히 ACS에 "이 응용 프로그램의 경우 토큰을 발급 할 때이 규칙 그룹 정책을 적용합니다"라고 말하는 클레임 ​​변환 규칙 그룹입니다.

는 ACS의 문서는 웹 포털을 통해 관리 서비스 :: 통해 모두 ACS 주장 규칙 구성에 대해 할 말이 많이 있습니다

https://msdn.microsoft.com/library/azure/hh147631.aspx

확장 응답 :

것은의 당신을 가정 해 봅시다 WIF를 사용하는 ASP.NET 앱에 ACS를 사용하여 인증합니다. "[email protected]"이메일을 사용하여 Google 사용자를 위해 "관리자"라는 역할 자격을 발급하도록 ACS를 구성합니다.

ASP.NET 응용 프로그램에서 WIF는이 역할 클레임을보고 HttpContext.Current.User.IsInRole ("Manager") 또는 이에 상응하는 web.config를 사용하여 액세스를 제어 할 수있게합니다.

웹 UI를 사용하여 이러한 ACS 규칙을 수동으로 관리하거나 ACS 관리 서비스를 사용하여 프로그래밍 방식으로 이러한 규칙을 ACS에 추가하는 등록 프로세스를 구현할 수 있습니다. acs.codeplex.com에서 사용할 수있는 ACS 관리 서비스 샘플이 있습니다.

등록 단계에 대한 질문의 일부를 들어 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=14347

+0

앤드류 귀하의 답변에 많은 감사드립니다. 따라서 ACS의 역할에 대해서는 정확합니다. 기본적으로 .net 멤버 자격 공급자 (UsersInRoles)에서 할 수있는 것처럼 사용자를 역할에 연결할 수는 없지만 IP를 기반으로 역할을 연결할 수 있습니다. 등록 단계는 어떻게됩니까? 인증 단계에서 사용자 (고객의 일부로서)를 인식하기 위해 우리는 데이터베이스에 무엇을 저장해야합니까? – Francesco

+0

아니, 내가 말하는 것은 ** 사용자가 ACS를 사용하여 역할에 연결할 수 있다는 것입니다. 나는 이것을 커버하기 위해 위의 나의 응답을 확장했다. –

9

, 가장 좋은 방법은이 사용자를 식별하는 데 사용할 :

또한, 신원 개발자 교육 키트는 WIF 역할 기반 액세스에 대한 몇 가지 예제를 가지고 NameIdentifier 클레임 유형

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

각 ID 공급자마다 고유해야하며 고정되어 있어야합니다. 전자 메일 주소 청구를 사용하는 경우 동일한 사용자에 대해 변경 될 수 있습니다. 당신이 IdentityProvider 청구 유형

http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider

으로 NameIdentifier의 주장을 결합 할 수 있도록 기술적으로 동일한 NameIdentifier (ACS와 함께 아웃 - 오브 - 박스들 중 어떤 것도 할)를 사용하지 않는 두 개의 정체성 제공 가능 수 고유성을 보장하기 위해

.

역할에 관해서는 ACS를 사용하여 Google과 같은 일반적인 ID에서 역할 클레임을 발행하는 것은 사용자 단위로 ACS에서 클레임 변환 규칙을 사용하여 관리하기가 매우 어려울 것이라고 말합니다. 등록 된 각 사용자에 대해 규칙을 추가해야합니다. 아마도 가능하지 않을 수 있습니다. ACS 규칙 그룹이 역할 클레임의 변형 (예 : 페더레이션 ADFS에서 발행)에 더 적합하다고 생각합니다. 귀하의 응용 프로그램에서 그것을 할 귀하의 아이디어는 더 나은 하나의 IMHO입니다. 코드에서 WIF를 사용하여이 작업을 수행 할 곳은 사용자 지정 ClaimsAuthenticationManager입니다.Authenticate 방법을 재정의하고 수신 원칙의 NameIdentifier 클레임을 기반으로 회원 데이터 저장소를 검색하고 회원 DB에있는 역할을 기반으로 새 IClaimsPrinciple을 만듭니다 (즉, 각 역할에 대한 역할 클레임을 추가합니다. 안으로있다).

그런 다음 사용자 정의 ClaimsAuthorizationManager에서 권한 결정을합니다. 이 웹 사이트에는 좋은 샘플과 정보가 있습니다.

에서

http://msdn.microsoft.com/en-us/library/ee748497.aspx