Skip to content

Commit cf82847

Browse files
authored
Correct identity token encryption by setting the correct security policy for the user token. (#2976)
* Correct identity token encryption by setting the correct security policy for the user token. * Separate endpoint securityPolicyUri from UserToken tokenSecurityPolicyUri
1 parent 14d78ca commit cf82847

File tree

2 files changed

+26
-28
lines changed

2 files changed

+26
-28
lines changed

Libraries/Opc.Ua.Client/Session/Session.cs

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2451,11 +2451,11 @@ public void Open(
24512451
SignatureData clientSignature = SecurityPolicies.Sign(m_instanceCertificate, securityPolicyUri, dataToSign);
24522452

24532453
// select the security policy for the user token.
2454-
securityPolicyUri = identityPolicy.SecurityPolicyUri;
2454+
string tokenSecurityPolicyUri = identityPolicy.SecurityPolicyUri;
24552455

2456-
if (String.IsNullOrEmpty(securityPolicyUri))
2456+
if (String.IsNullOrEmpty(tokenSecurityPolicyUri))
24572457
{
2458-
securityPolicyUri = m_endpoint.Description.SecurityPolicyUri;
2458+
tokenSecurityPolicyUri = m_endpoint.Description.SecurityPolicyUri;
24592459
}
24602460

24612461
// save previous nonce
@@ -2465,12 +2465,12 @@ public void Open(
24652465
ValidateServerNonce(
24662466
identity,
24672467
serverNonce,
2468-
securityPolicyUri,
2468+
tokenSecurityPolicyUri,
24692469
previousServerNonce,
24702470
m_endpoint.Description.SecurityMode);
24712471

24722472
// sign data with user token.
2473-
SignatureData userTokenSignature = identityToken.Sign(dataToSign, securityPolicyUri);
2473+
SignatureData userTokenSignature = identityToken.Sign(dataToSign, tokenSecurityPolicyUri);
24742474

24752475
// encrypt token.
24762476
identityToken.Encrypt(
@@ -2555,8 +2555,7 @@ public void Open(
25552555
{
25562556
try
25572557
{
2558-
CloseSession(null, false);
2559-
CloseChannel();
2558+
Close(true);
25602559
}
25612560
catch (Exception e)
25622561
{
@@ -2600,9 +2599,6 @@ public void UpdateSession(IUserIdentity identity, StringCollection preferredLoca
26002599
}
26012600

26022601
// get the identity token.
2603-
UserIdentityToken identityToken = null;
2604-
SignatureData userTokenSignature = null;
2605-
26062602
string securityPolicyUri = m_endpoint.Description.SecurityPolicyUri;
26072603

26082604
// create the client signature.
@@ -2626,14 +2622,14 @@ public void UpdateSession(IUserIdentity identity, StringCollection preferredLoca
26262622
}
26272623

26282624
// select the security policy for the user token.
2629-
securityPolicyUri = identityPolicy.SecurityPolicyUri;
2625+
string tokenSecurityPolicyUri = identityPolicy.SecurityPolicyUri;
26302626

2631-
if (String.IsNullOrEmpty(securityPolicyUri))
2627+
if (String.IsNullOrEmpty(tokenSecurityPolicyUri))
26322628
{
2633-
securityPolicyUri = m_endpoint.Description.SecurityPolicyUri;
2629+
tokenSecurityPolicyUri = m_endpoint.Description.SecurityPolicyUri;
26342630
}
26352631

2636-
bool requireEncryption = securityPolicyUri != SecurityPolicies.None;
2632+
bool requireEncryption = tokenSecurityPolicyUri != SecurityPolicies.None;
26372633

26382634
// validate the server certificate before encrypting tokens.
26392635
if (m_serverCertificate != null && requireEncryption && identity.TokenType != UserTokenType.Anonymous)
@@ -2645,14 +2641,16 @@ public void UpdateSession(IUserIdentity identity, StringCollection preferredLoca
26452641
ValidateServerNonce(
26462642
identity,
26472643
serverNonce,
2648-
securityPolicyUri,
2644+
tokenSecurityPolicyUri,
26492645
m_previousServerNonce,
26502646
m_endpoint.Description.SecurityMode);
26512647

26522648
// sign data with user token.
2653-
identityToken = identity.GetIdentityToken();
2649+
UserIdentityToken identityToken = identity.GetIdentityToken();
26542650
identityToken.PolicyId = identityPolicy.PolicyId;
2655-
userTokenSignature = identityToken.Sign(dataToSign, securityPolicyUri);
2651+
SignatureData userTokenSignature = identityToken.Sign(dataToSign, tokenSecurityPolicyUri);
2652+
2653+
m_userTokenSecurityPolicyUri = tokenSecurityPolicyUri;
26562654

26572655
// encrypt token.
26582656
identityToken.Encrypt(
@@ -5739,13 +5737,13 @@ ITransportChannel transportChannel
57395737
}
57405738

57415739
// select the security policy for the user token.
5742-
string securityPolicyUri = identityPolicy.SecurityPolicyUri;
5740+
string tokenSecurityPolicyUri = identityPolicy.SecurityPolicyUri;
57435741

5744-
if (String.IsNullOrEmpty(securityPolicyUri))
5742+
if (String.IsNullOrEmpty(tokenSecurityPolicyUri))
57455743
{
5746-
securityPolicyUri = endpoint.SecurityPolicyUri;
5744+
tokenSecurityPolicyUri = endpoint.SecurityPolicyUri;
57475745
}
5748-
m_userTokenSecurityPolicyUri = securityPolicyUri;
5746+
m_userTokenSecurityPolicyUri = tokenSecurityPolicyUri;
57495747

57505748
// need to refresh the identity (reprompt for password, refresh token).
57515749
if (m_RenewUserIdentity != null)
@@ -5757,14 +5755,14 @@ ITransportChannel transportChannel
57575755
ValidateServerNonce(
57585756
m_identity,
57595757
m_serverNonce,
5760-
securityPolicyUri,
5758+
tokenSecurityPolicyUri,
57615759
m_previousServerNonce,
57625760
m_endpoint.Description.SecurityMode);
57635761

57645762
// sign data with user token.
57655763
UserIdentityToken identityToken = m_identity.GetIdentityToken();
57665764
identityToken.PolicyId = identityPolicy.PolicyId;
5767-
SignatureData userTokenSignature = identityToken.Sign(dataToSign, securityPolicyUri);
5765+
SignatureData userTokenSignature = identityToken.Sign(dataToSign, tokenSecurityPolicyUri);
57685766

57695767
// encrypt token.
57705768
identityToken.Encrypt(

Libraries/Opc.Ua.Client/Session/SessionAsync.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,11 @@ public async Task OpenAsync(
217217
SignatureData clientSignature = SecurityPolicies.Sign(m_instanceCertificate, securityPolicyUri, dataToSign);
218218

219219
// select the security policy for the user token.
220-
securityPolicyUri = identityPolicy.SecurityPolicyUri;
220+
string tokenSecurityPolicyUri = identityPolicy.SecurityPolicyUri;
221221

222-
if (String.IsNullOrEmpty(securityPolicyUri))
222+
if (String.IsNullOrEmpty(tokenSecurityPolicyUri))
223223
{
224-
securityPolicyUri = m_endpoint.Description.SecurityPolicyUri;
224+
tokenSecurityPolicyUri = m_endpoint.Description.SecurityPolicyUri;
225225
}
226226

227227
// save previous nonce
@@ -231,12 +231,12 @@ public async Task OpenAsync(
231231
ValidateServerNonce(
232232
identity,
233233
serverNonce,
234-
securityPolicyUri,
234+
tokenSecurityPolicyUri,
235235
previousServerNonce,
236236
m_endpoint.Description.SecurityMode);
237237

238238
// sign data with user token.
239-
SignatureData userTokenSignature = identityToken.Sign(dataToSign, securityPolicyUri);
239+
SignatureData userTokenSignature = identityToken.Sign(dataToSign, tokenSecurityPolicyUri);
240240

241241
// encrypt token.
242242
identityToken.Encrypt(

0 commit comments

Comments
 (0)