@@ -50,5 +50,80 @@ public void TestGetSystemClaims(ClaimsIdentity identity, string userId, Func<IEn
5050
5151 Assert . Equal ( expectedClaimsCount , ci . Claims . Count ( ) ) ;
5252 }
53+
54+ [ Fact ]
55+ public void TestGetPreservedSystemClaims ( )
56+ {
57+ // preserved system claims are renamed and reverted back
58+ var claims = ClaimsUtility . BuildJwtClaims (
59+ new ClaimsPrincipal ( new ClaimsIdentity ( new Claim [ ] { new Claim ( "iss" , "A" ) , new Claim ( "jti" , "B" ) } ) ) , null , null ) . ToArray ( ) ;
60+ Assert . Equal ( "asrs.u.iss" , claims [ 0 ] . Type ) ;
61+ Assert . Equal ( "asrs.u.jti" , claims [ 1 ] . Type ) ;
62+
63+ var resultIdentity = ClaimsUtility . GetUserPrincipal ( claims ) . Identity ;
64+
65+ var ci = resultIdentity as ClaimsIdentity ;
66+ Assert . NotNull ( ci ) ;
67+ Assert . Equal ( 2 , ci . Claims . Count ( ) ) ;
68+ Assert . True ( ci . HasClaim ( "iss" , "A" ) ) ;
69+ Assert . True ( ci . HasClaim ( "jti" , "B" ) ) ;
70+ }
71+
72+ [ Fact ]
73+ public void TestGetSubjectClaims ( )
74+ {
75+ // only the first sub claim is considered as valid to the service
76+ var claims = ClaimsUtility . BuildJwtClaims (
77+ new ClaimsPrincipal ( new ClaimsIdentity ( new Claim [ ] { new Claim ( "sub" , "A" ) , new Claim ( "sub" , "B" ) } ) ) , null , null ) . ToArray ( ) ;
78+ Assert . Equal ( "sub" , claims [ 0 ] . Type ) ;
79+ Assert . Equal ( "asrs.u.sub" , claims [ 1 ] . Type ) ;
80+
81+ var resultIdentity = ClaimsUtility . GetUserPrincipal ( claims ) . Identity ;
82+
83+ var ci = resultIdentity as ClaimsIdentity ;
84+ Assert . NotNull ( ci ) ;
85+ Assert . Equal ( 2 , ci . Claims . Count ( ) ) ;
86+ Assert . True ( ci . HasClaim ( "sub" , "A" ) ) ;
87+ Assert . True ( ci . HasClaim ( "sub" , "B" ) ) ;
88+
89+ claims = ClaimsUtility . BuildJwtClaims (
90+ new ClaimsPrincipal ( new ClaimsIdentity ( new Claim [ ] { new Claim ( "sub" , "A" ) , new Claim ( "sub" , "B" ) } ) ) , "C" , null ) . ToArray ( ) ;
91+ Assert . Equal ( "asrs.s.uid" , claims [ 0 ] . Type ) ;
92+ Assert . Equal ( "sub" , claims [ 1 ] . Type ) ;
93+ Assert . Equal ( "asrs.u.sub" , claims [ 2 ] . Type ) ;
94+
95+ resultIdentity = ClaimsUtility . GetUserPrincipal ( claims ) . Identity ;
96+
97+ ci = resultIdentity as ClaimsIdentity ;
98+ Assert . NotNull ( ci ) ;
99+ Assert . Equal ( 2 , ci . Claims . Count ( ) ) ;
100+ Assert . True ( ci . HasClaim ( "sub" , "A" ) ) ;
101+ Assert . True ( ci . HasClaim ( "sub" , "B" ) ) ;
102+
103+ // single sub claim is considered as valid
104+ claims = ClaimsUtility . BuildJwtClaims (
105+ new ClaimsPrincipal ( new ClaimsIdentity ( new Claim [ ] { new Claim ( "sub" , "A" ) } ) ) , null , null ) . ToArray ( ) ;
106+ Assert . Single ( claims ) ;
107+ Assert . Equal ( "sub" , claims [ 0 ] . Type ) ;
108+
109+ resultIdentity = ClaimsUtility . GetUserPrincipal ( claims ) . Identity ;
110+
111+ ci = resultIdentity as ClaimsIdentity ;
112+ Assert . NotNull ( ci ) ;
113+ Assert . Single ( ci . Claims ) ;
114+ Assert . True ( ci . HasClaim ( "sub" , "A" ) ) ;
115+
116+ claims = ClaimsUtility . BuildJwtClaims (
117+ new ClaimsPrincipal ( new ClaimsIdentity ( new Claim [ ] { new Claim ( "sub" , "A" ) } ) ) , "C" , null ) . ToArray ( ) ;
118+ Assert . Equal ( "asrs.s.uid" , claims [ 0 ] . Type ) ;
119+ Assert . Equal ( "sub" , claims [ 1 ] . Type ) ;
120+
121+ resultIdentity = ClaimsUtility . GetUserPrincipal ( claims ) . Identity ;
122+
123+ ci = resultIdentity as ClaimsIdentity ;
124+ Assert . NotNull ( ci ) ;
125+ Assert . Single ( ci . Claims ) ;
126+ Assert . True ( ci . HasClaim ( "sub" , "A" ) ) ;
127+ }
53128 }
54129}
0 commit comments