2012-09-18 4 views
0

Azure에서 호스트 될 MVC 4 응용 프로그램을 개발 중이며 인증을 위해 ACS 서비스를 사용하려고합니다. 사용자가 인증되면 결과 내역을 사용하여 내 지역 기록과 연관시킵니다. 그 후, 신청서가 승인 결정을 위해 사용하는 로컬 인증을 나타내는 추가 클레임을 포함하도록 클레임 세트를 확장하고 싶습니다. 나는 Principle을 대체 할 필요가 있다고 가정하지만, MVC에서 이것을 어디에서/언제 할 것인지, 그리고 세션이 끝날 때까지 일반적으로 사용되는 인증 배관을 망가 뜨리지 않기를 원한다. 누구든지 이것에 대해 밝힐 수 있습니까?MVC 세션을위한 Azure ACS 클레임 확장

답변

1

, 당신이 단지에와 IClaimsPrincipal에서 주장을 추가 및 제거 할 수 있음을 주목할 필요가 , 또는 자신의 고안에 대한 맞춤 문자열. ClaimTypes.Role 유형의 여러 클레임을 추가 할 수 있습니다. 다른 유형에 대해서는 확실하지 않습니다. ClaimsCollection 문서에서

:

은 하나의 주제와 관련된 클레임의 컬렉션을 나타냅니다.

ClaimCollection에 클레임을 추가하면 SetSubject 메서드를 호출하여 해당 클레임 을 컬렉션과 연결된 제목과 암시 적으로 연결합니다.

ClaimCollection에서 클레임을 제거하면 SetSubject 메서드를 호출하여이 연결을 암시 적으로 제거합니다.

http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimcollection.aspx

닷넷 4.5의 경우, 신원 클래스 및 청구를 업데이트하는 방법이 변경 업데이트뿐만 아니라 네임 스페이스 :

using System.IdentityModel; 
using System.Security.Claims; 

public static void UpdateClaims(Member member, ClaimsIdentity identity) 
{ 
    identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Name)); 
    identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Email)); 
    identity.AddClaim(new Claim(ClaimTypes.Name, "Steve Smith")); 
    identity.AddClaim(new Claim(ClaimTypes.Email, "[email protected]")); 
} 

UpdateClaims(User.Identity as ClaimsIdentity); 

http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.aspx

2

ClaimSet에 농축을위한 WIF의 확장 점은 문서부터 ClaimsAuthenticationManager

입니다 :

주장 인증 매니저는 필터링하는 데 사용할 수있는 RP 처리 파이프 라인에 확장 점을 제공합니다 , 수정하거나 RP 신청서가 호출되기 전에 IClaimsPrincipal에 의해 제시된 클레임 집합에 새로운 클레임을 주입하십시오.

ACS에 규칙을 추가하여 필요한 소유권 주장으로 토큰을 풍부하게 만들 수도 있습니다.

public static void UpdateClaims(IClaimsIdentity identity) 
{ 
    identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Name)); 
    identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Email)); 
    identity.Claims.Add(new Claim(ClaimTypes.Name, "Steve Smith")); 
    identity.Claims.Add(new Claim(ClaimTypes.Email, "[email protected]")); 
} 

UpdateClaims(User.Identity as IClaimsIdentity); 

주장이 ClaimTypes에 열거 된 유형 중 하나가 될 수 있습니다 추가 :

@Eugenio 페이스가 말씀하신 것을 외에도
관련 문제