2014-05-21 9 views
6

WIF (Windows Identity Foundation) 4.5에서 Microsoft는 유형 인 WindowsPrincipal 클래스를 만들었습니다. 물론 이러한 클래스는 이식 가능하지 않지만 그 뒤에있는 인터페이스는 (IPrincipal)입니다. IIdentity 인터페이스를 구현하는 ClaimsIndentity 클래스에 대해서도 마찬가지입니다.휴대용 클래스 라이브러리에서 IPrincipal 및 IIdentity를 어떻게 사용합니까?

내가 가지고있는 문제는이 클래스와 WIFF는 일반적으로 "클레임"이라는 개념에 전적으로 달렸습니다 ... 두 인터페이스 인 IPrincipalIIdentity은 그렇지 않습니다. 뿐만 아니라 ClaimsPrincipal 클래스에는 이와 연관된 단일 ID 대신 ID 집합이 있습니다.

  • IPrincipal의 멤버는 IdentityIsInRole입니다.
  • 인원수는 AuthenticationType, IsAuthenticatedName입니다.

휴대용 클래스 라이브러리가이 두 인터페이스에만 액세스 할 수 있다는 사실을 감안할 때 실제 청구를 얻으려면 어떻게해야합니까?

또한 드물게 주체에 여러 ID가있는 경우 "비 기본"ID를 얻는 방법은 무엇입니까?

+0

Claims의 콜렉션을 가지므로 ClaimsPrincipal의 참조 변수에 들어가서 모든 ID에 액세스 할 수 있습니다. Like ClaimsPrincipal.Identities [1] 두 번째 비 기본 ID –

답변

4

마이크로 소프트는 휴대 가능하지 않은 Microsoft.IdentityModel.dll의 종류를 알고 있습니다 (아직, 희망). 이러한 유형은 현재 ID 유형을 확장합니다. IPrincipal는 :

public interface IClaimsPrincipal : IPrincipal 

이 인식 유형 IPrincipalIIdentity 인터페이스를 사용하여 이전 코드와있는 Compatibile 있습니다 주장하고 있다는 것을 의미한다. 그러나 코드 을 확인하려면Microsoft.IdentityModel.dll (PCL로 제공되지 않음)에 대한 참조를 추가하거나 처음부터 작성해야합니다. 당신이 주장을 인식 형식의 인스턴스를 처리 할 때 작동, 당신은 단지 IPrincipal 인터페이스에 downcasting를 사용할 수있는 방법을 기존 코드를 테스트하려면

: 당신은 모든 ClaimsPrincipal 여러 정체성과 모든 정체성을 가지고 말했듯이

IClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(new List<IClaimsIdentity>() 
{ 
    new ClaimsIdentity("AuthType1"), 
    new ClaimsIdentity("AuthType2") 
}); 

IPrincipal principal = claimsPrincipal as IPrincipal; 
IIdentity identity = principal.Identity;