2014-07-20 9 views
15

Asp.Net 5 MVC, Owin 및 Oauth2 무기명 토큰을 auth 형식으로 개발하고 있습니다.Claim (System.Security.Claims)에 문자열 목록 저장

맞춤 입력 유형이있는 System.Security.Claims.Claim 안에 "CODEFOO,CODBAR,CODEX,.." 문자열 목록을 저장해야합니다.

사용자가 토큰을 요청하면이 "사용자 코드"목록은 백엔드에서 가져와 특정 사용자 정의 클레임 유형을 사용하여 ID 내부에 설정됩니다.
사용자가 토큰을 보내고 특정 MVC 동작을 탐색 할 때 응용 프로그램은 클레임 내부의 사용자 코드 목록에 특정 코드가 포함되어 있는지 확인해야합니다.

List<string> userCodes = rep.GetUserCodeFromBackEnd(); 
string userCodesClaimType = "http://foo.it/claim/usercodesclaimtype"; 

지금은 JSON에서 문자열 목록을 serialize하는 중입니다.

var claim = new Claim(userCodesCaimType, JsonConvert.SerializeObject(userCodes)); 

과 다시 해제 직렬화 얻을이 같은 뭔가를 : 청구 내부에 값 목록을 저장하는 더 좋은 방법이있다 :

var userCodesClaim = identity.Claims.FirstOrDefault<Claim>(c=>c.Type == userCodesClaimType) ; 
var userCodesClaimValue = JsonConvert.DeserializeObject<List<string>>(userCodesClaim.Value); 

이제 문제는

?

, 치 속성은 값의 유형 정보를 식별하는 캐릭터 라인을 포함
청구는 문서라는 ValueType 속성이 있습니다. 이 속성은 값 형식을 이해하고 을 serialize하고 값을 deserialize하는 방법에 대한 정보를 제공하는 데 사용할 수 있습니다. 솔루션에 복잡한 값인 형식이 필요한 경우 ValueType 속성에서 표준 XML 스키마 형식을 사용하여 Value 속성이 인 문자열에서 직렬화 및 역 직렬화되는 방식을 나타내는 것이 좋습니다.

불행히도 해당 속성의 사용을 문서화 한 예제를 찾지 못했습니다.
Json 직렬화가 정상입니까, 아니면 ValueType 방식을 사용해야합니까?

+0

왜 복수 소유권 주장을 추가하지 않으시겠습니까? –

답변

15

ValueType은 코드가 XML 스키마 유형을 포함하는 것처럼 값을 해석/역 직렬화하는 방법을 식별하는 방법입니다. 서로 다른 소스의 코드 사이에서 사용되는 경우 이해가되지만 내용을 해석하는 방법을 알고있는 한 자신의 애플리케이션에서 무시할 수 있습니다.

그러나 값이 여러 개인 경우 복잡한 유형을 사용할 필요가 없습니다. 클레임 ID에는 동일한 ClaimType의 여러 클레임이있을 수 있으므로 코드를 JSon 문자열로 serialize하는 대신 여러 클레임을 추가해야합니다. 각 사용자 코드 당 하나. 모두 동일한 클레임 유형입니다. 이렇게하면 특정 사용자 코드가 있는지 확인하기 위해 HasClaim 방법을 사용할 수 있습니다.

+0

나는 값 유형을 나타내는'ValueType'을 Claim Type과 혼동한다고 생각합니다. – systempuntoout

+0

당신은 내 대답을 업데이트하는 것이 옳습니다. –

4

JSON으로 고정하거나 다중 값 주장 (LDAP 용어로 다중 값 속성)을 사용합니다.

System.Security.Claims.Claim.Type과 Claim.ValueType을 혼동하지 마십시오. 유형은 "클레임 이름"(LDAP의 속성 이름)입니다. 샘플 uris는 System.Security.Claims.ClaimTypes를 참조하십시오. ValueType은 XML serialization 용입니다. 샘플 uris에 대해서는 System.Security.Claims.ClaimValueTypes를 참조하십시오.

ValueType을 사용하여 올바르게 직렬화하려고 생각했습니다. 완전히 불가능하지는 않습니다. 직접 프로그래밍해야합니다. SAML 토큰에서 처리 할 수있는 다른 많은 개발자가 없다는 것이 두렵다. 그들이 당신에게 총을 들고 있지 않는 한 그렇게하지 마십시오. Dominick은 또한 경고했다.

다음을 참조하십시오. http://social.msdn.microsoft.com/Forums/vstudio/en-US/a11365c2-9b44-49db-97f2-50c30adff14d/complex-type-in-claims 이것은 WIF 3.5 용 이었지만 원리는 .NET 4.5에서 동일합니다.

+0

의견에 감사드립니다. 나는 앤더스 아벨 (Anders Abel)이 제안한 것과 같은 유형의 여러 주장을 만들려고 노력할 것이라고 생각합니다. – systempuntoout