2
2
// Licensed under the MIT License.
3
3
4
4
#if NETFRAMEWORK
5
- using System . Linq ;
6
5
using Microsoft . Identity . Client . Kerberos ;
7
- using Microsoft . Identity . Client . Utils ;
8
- using Microsoft . Identity . Json . Linq ;
9
6
using Microsoft . Identity . Test . Common ;
10
7
using Microsoft . VisualStudio . TestTools . UnitTesting ;
8
+ using System . Text . Json ;
11
9
12
10
namespace Microsoft . Identity . Test . Unit . Kerberos
13
11
{
@@ -22,17 +20,17 @@ public class KerberosSupplementalTicketManagerTests
22
20
/// <summary>
23
21
/// Service principal name for testing.
24
22
/// </summary>
25
- private static readonly string _testServicePrincipalName = "HTTP/prod.aadkreberos.msal.com" ;
23
+ private const string TestServicePrincipalName = "HTTP/prod.aadkreberos.msal.com" ;
26
24
27
25
/// <summary>
28
26
/// Username within the ID token.
29
27
/// </summary>
30
- private static readonly string _testClientName = "localAdmin@aadktest.onmicrosoft.com" ;
28
+ private const string TestClientName = "localAdmin@aadktest.onmicrosoft.com" ;
31
29
32
30
/// <summary>
33
31
/// Sample ID Token without Kerbero Service Ticket.
34
32
/// </summary>
35
- private static readonly string _testIdToken =
33
+ private const string TestIdToken =
36
34
"eyJ0eXAiOiJKV1QiLCJyaCI6IjAuQWdBQXI0R0lRckdhczBDQldEWVJOWV9fYUlLMElWSlJKck5NbXRqQW1uamszcDRzQU5NLiIsImFsZyI6IlJTMjU2"
37
35
+ "Iiwia2lkIjoibk9vM1pEck9EWEVLMWpLV2hYc2xIUl9LWEVnIn0.eyJhdWQiOiI1MjIxYjQ4Mi0yNjUxLTRjYjMtOWFkOC1jMDlhNzhlNGRlOWUiLCJp"
38
36
+ "c3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNDI4ODgxYWYtOWFiMS00MGIzLTgxNTgtMzYxMTM1OGZmZjY4L3YyLjAiLCJpYXQi"
@@ -48,7 +46,7 @@ public class KerberosSupplementalTicketManagerTests
48
46
/// <summary>
49
47
/// Sample ID token sample with Kerberos Service Ticket.
50
48
/// </summary>
51
- private static readonly string _testIdTokenWithKerberosTicketClaim =
49
+ private const string TestIdTokenWithKerberosTicketClaim =
52
50
"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyJ9.eyJhdWQiOiI1MjIxYjQ4Mi0yNjUxLTRj"
53
51
+ "YjMtOWFkOC1jMDlhNzhlNGRlOWUiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vNDI4ODgxYWYtOWFiMS00MGIzLTgxNTgtMz"
54
52
+ "YxMTM1OGZmZjY4L3YyLjAiLCJpYXQiOjE2MTk4MTg1MTgsIm5iZiI6MTYxOTgxODUxOCwiZXhwIjoxNjE5ODIyNDE4LCJhaW8iOiJBVFFBeS84VEFBQUFP"
@@ -99,27 +97,27 @@ public void TestInit()
99
97
[ TestMethod ]
100
98
public void FromIdToken_WithKerberosTicket ( )
101
99
{
102
- KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( _testIdTokenWithKerberosTicketClaim ) ;
100
+ KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( TestIdTokenWithKerberosTicketClaim ) ;
103
101
104
102
Assert . IsNotNull ( ticket ) ;
105
103
Assert . IsTrue ( string . IsNullOrEmpty ( ticket . ErrorMessage ) ) ;
106
104
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." ) ;
109
107
}
110
108
111
109
[ TestMethod ]
112
110
public void FromIdToken_WithoutKerberosTicket ( )
113
111
{
114
- KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( _testIdToken ) ;
112
+ KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( TestIdToken ) ;
115
113
116
114
Assert . IsNull ( ticket ) ;
117
115
}
118
116
119
117
[ TestMethod ]
120
118
public void GetKrbCred ( )
121
119
{
122
- KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( _testIdTokenWithKerberosTicketClaim ) ;
120
+ KerberosSupplementalTicket ticket = KerberosSupplementalTicketManager . FromIdToken ( TestIdTokenWithKerberosTicketClaim ) ;
123
121
byte [ ] krbCred = KerberosSupplementalTicketManager . GetKrbCred ( ticket ) ;
124
122
125
123
Assert . IsNotNull ( krbCred ) ;
@@ -128,53 +126,41 @@ public void GetKrbCred()
128
126
[ TestMethod ]
129
127
public void GetKerberosTicketClaim_IdToken ( )
130
128
{
129
+ // {id_token: { "xms_as_rep":{"essential":"false","value":"HTTP/prod.aadkreberos.msal.com"} } }
131
130
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
+ }
148
140
}
149
141
150
142
[ TestMethod ]
151
143
public void GetKerberosTicketClaim_AccessToken ( )
152
144
{
153
145
string kerberosClaim
154
- = KerberosSupplementalTicketManager . GetKerberosTicketClaim ( _testServicePrincipalName , KerberosTicketContainer . AccessToken ) ;
155
-
156
- Assert . IsFalse ( string . IsNullOrEmpty ( kerberosClaim ) ) ;
146
+ = KerberosSupplementalTicketManager . GetKerberosTicketClaim ( TestServicePrincipalName , KerberosTicketContainer . AccessToken ) ;
157
147
158
- JObject claim = JObject . Parse ( kerberosClaim ) ;
159
- Assert . IsNotNull ( claim ) ;
148
+ using ( JsonDocument document = JsonDocument . Parse ( kerberosClaim ) )
149
+ {
150
+ JsonElement root = document . RootElement ;
160
151
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
+ }
166
155
}
167
156
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." ) ;
178
164
}
179
165
}
180
166
}
0 commit comments