22// Licensed under the MIT License.
33
44#if NETFRAMEWORK
5- using System . Linq ;
65using Microsoft . Identity . Client . Kerberos ;
7- using Microsoft . Identity . Client . Utils ;
8- using Microsoft . Identity . Json . Linq ;
96using Microsoft . Identity . Test . Common ;
107using Microsoft . VisualStudio . TestTools . UnitTesting ;
8+ using System . Text . Json ;
119
1210namespace Microsoft . Identity . Test . Unit . Kerberos
1311{
@@ -22,17 +20,17 @@ public class KerberosSupplementalTicketManagerTests
2220 /// <summary>
2321 /// Service principal name for testing.
2422 /// </summary>
25- private static readonly string _testServicePrincipalName = "HTTP/prod.aadkreberos.msal.com" ;
23+ private const string TestServicePrincipalName = "HTTP/prod.aadkreberos.msal.com" ;
2624
2725 /// <summary>
2826 /// Username within the ID token.
2927 /// </summary>
30- private static readonly string _testClientName = "[email protected] " ; 28+ private const string TestClientName = "[email protected] " ; 3129
3230 /// <summary>
3331 /// Sample ID Token without Kerbero Service Ticket.
3432 /// </summary>
35- private static readonly string _testIdToken =
33+ private const string TestIdToken =
3634 "eyJ0eXAiOiJKV1QiLCJyaCI6IjAuQWdBQXI0R0lRckdhczBDQldEWVJOWV9fYUlLMElWSlJKck5NbXRqQW1uamszcDRzQU5NLiIsImFsZyI6IlJTMjU2"
3735 + "Iiwia2lkIjoibk9vM1pEck9EWEVLMWpLV2hYc2xIUl9LWEVnIn0.eyJhdWQiOiI1MjIxYjQ4Mi0yNjUxLTRjYjMtOWFkOC1jMDlhNzhlNGRlOWUiLCJp"
3836 + "c3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNDI4ODgxYWYtOWFiMS00MGIzLTgxNTgtMzYxMTM1OGZmZjY4L3YyLjAiLCJpYXQi"
@@ -48,7 +46,7 @@ public class KerberosSupplementalTicketManagerTests
4846 /// <summary>
4947 /// Sample ID token sample with Kerberos Service Ticket.
5048 /// </summary>
51- private static readonly string _testIdTokenWithKerberosTicketClaim =
49+ private const string TestIdTokenWithKerberosTicketClaim =
5250 "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyJ9.eyJhdWQiOiI1MjIxYjQ4Mi0yNjUxLTRj"
5351 + "YjMtOWFkOC1jMDlhNzhlNGRlOWUiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNDI4ODgxYWYtOWFiMS00MGIzLTgxNTgtMz"
5452 + "YxMTM1OGZmZjY4L3YyLjAiLCJpYXQiOjE2MTk4MTg1MTgsIm5iZiI6MTYxOTgxODUxOCwiZXhwIjoxNjE5ODIyNDE4LCJhaW8iOiJBVFFBeS84VEFBQUFP"
@@ -99,27 +97,27 @@ public void TestInit()
9997 [ TestMethod ]
10098 public void FromIdToken_WithKerberosTicket ( )
10199 {
102- KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( _testIdTokenWithKerberosTicketClaim ) ;
100+ KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( TestIdTokenWithKerberosTicketClaim ) ;
103101
104102 Assert . IsNotNull ( ticket ) ;
105103 Assert . IsTrue ( string . IsNullOrEmpty ( ticket . ErrorMessage ) ) ;
106104 Assert . IsFalse ( string . IsNullOrEmpty ( ticket . KerberosMessageBuffer ) ) ;
107- Assert . AreEqual ( _testServicePrincipalName , ticket . ServicePrincipalName , "Service principal name is not matched." ) ;
108- Assert . AreEqual ( _testClientName , ticket . ClientName , "Client name is not matched." ) ;
105+ Assert . AreEqual ( TestServicePrincipalName , ticket . ServicePrincipalName , "Service principal name is not matched." ) ;
106+ Assert . AreEqual ( TestClientName , ticket . ClientName , "Client name is not matched." ) ;
109107 }
110108
111109 [ TestMethod ]
112110 public void FromIdToken_WithoutKerberosTicket ( )
113111 {
114- KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( _testIdToken ) ;
112+ KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( TestIdToken ) ;
115113
116114 Assert . IsNull ( ticket ) ;
117115 }
118116
119117 [ TestMethod ]
120118 public void GetKrbCred ( )
121119 {
122- KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( _testIdTokenWithKerberosTicketClaim ) ;
120+ KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( TestIdTokenWithKerberosTicketClaim ) ;
123121 byte [ ] krbCred = KerberosSupplementalTicketManager . GetKrbCred ( ticket ) ;
124122
125123 Assert . IsNotNull ( krbCred ) ;
@@ -128,53 +126,41 @@ public void GetKrbCred()
128126 [ TestMethod ]
129127 public void GetKerberosTicketClaim_IdToken ( )
130128 {
129+ // {id_token: { "xms_as_rep":{"essential":"false","value":"HTTP/prod.aadkreberos.msal.com"} } }
131130 string kerberosClaim
132- = KerberosSupplementalTicketManager . GetKerberosTicketClaim ( _testServicePrincipalName , KerberosTicketContainer . IdToken ) ;
133-
134- Assert . IsFalse ( string . IsNullOrEmpty ( kerberosClaim ) ) ;
135- JsonHelper . DeserializeFromJson < JObject > ( kerberosClaim ) ;
136-
137- JObject claim = JObject . Parse ( kerberosClaim ) ;
138- Assert . IsNotNull ( claim ) ;
139-
140- Assert . IsTrue ( claim . ContainsKey ( "id_token" ) ) ;
141- JToken idToken = claim . GetValue ( "id_token" ) ;
142-
143-
144- Assert . IsNotNull ( idToken ) ;
145-
146-
147- CheckKerberosClaim ( idToken ) ;
131+ = KerberosSupplementalTicketManager . GetKerberosTicketClaim ( TestServicePrincipalName , KerberosTicketContainer . IdToken ) ;
132+
133+ using ( JsonDocument document = JsonDocument . Parse ( kerberosClaim ) )
134+ {
135+ JsonElement root = document . RootElement ;
136+
137+ Assert . IsTrue ( root . TryGetProperty ( "id_token" , out JsonElement idToken ) , "id_token property is missing." ) ;
138+ CheckKerberosClaimContent ( idToken ) ;
139+ }
148140 }
149141
150142 [ TestMethod ]
151143 public void GetKerberosTicketClaim_AccessToken ( )
152144 {
153145 string kerberosClaim
154- = KerberosSupplementalTicketManager . GetKerberosTicketClaim ( _testServicePrincipalName , KerberosTicketContainer . AccessToken ) ;
155-
156- Assert . IsFalse ( string . IsNullOrEmpty ( kerberosClaim ) ) ;
146+ = KerberosSupplementalTicketManager . GetKerberosTicketClaim ( TestServicePrincipalName , KerberosTicketContainer . AccessToken ) ;
157147
158- JObject claim = JObject . Parse ( kerberosClaim ) ;
159- Assert . IsNotNull ( claim ) ;
148+ using ( JsonDocument document = JsonDocument . Parse ( kerberosClaim ) )
149+ {
150+ JsonElement root = document . RootElement ;
160151
161- Assert . IsTrue ( claim . ContainsKey ( "access_token" ) ) ;
162- JToken accessToken = claim . GetValue ( "access_token" ) ;
163- Assert . IsNotNull ( accessToken ) ;
164-
165- CheckKerberosClaim ( accessToken ) ;
152+ Assert . IsTrue ( root . TryGetProperty ( "access_token" , out JsonElement accessToken ) , "access_token property is missing." ) ;
153+ CheckKerberosClaimContent ( accessToken ) ;
154+ }
166155 }
167156
168- private void CheckKerberosClaim ( JToken claim )
169- {
170- JToken asRep = claim [ "xms_as_rep" ] ;
171- Assert . IsNotNull ( asRep ) ;
172-
173- Assert . AreEqual ( "false" , asRep [ "essential" ] . Value < string > ( ) ,
174- "essential field is not matched." ) ;
175-
176- Assert . AreEqual ( _testServicePrincipalName , asRep [ "value" ] . Value < string > ( ) ,
177- "Service principal name is not matched." ) ;
157+ private static void CheckKerberosClaimContent ( JsonElement idToken )
158+ {
159+ Assert . IsTrue ( idToken . TryGetProperty ( "xms_as_rep" , out JsonElement xmsAsRep ) , "xms_as_rep property is missing." ) ;
160+ Assert . IsTrue ( xmsAsRep . TryGetProperty ( "essential" , out JsonElement essential ) , "essential property is missing." ) ;
161+ Assert . AreEqual ( "false" , essential . GetString ( ) , "essential value is not matched." ) ;
162+ Assert . IsTrue ( xmsAsRep . TryGetProperty ( "value" , out JsonElement value ) , "value property is missing." ) ;
163+ Assert . AreEqual ( TestServicePrincipalName , value . GetString ( ) , "value is not matched." ) ;
178164 }
179165 }
180166}
0 commit comments