Skip to content

Commit 29d8668

Browse files
authored
Merge pull request #6061 from miguelvaz78/BUG_6059
Adds lock on calls to ComputeHash to handle concurrency
2 parents 1e04695 + b381f30 commit 29d8668

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

DNN Platform/Dnn.AuthServices.Jwt/Components/Common/Controllers/JwtController.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ internal class JwtController : ServiceLocator<IJwtController, JwtController>, IJ
4343
private static readonly HashAlgorithm Hasher = SHA384.Create();
4444
private static readonly Encoding TextEncoder = Encoding.UTF8;
4545

46+
private static object hasherLock = new object();
47+
4648
/// <inheritdoc/>
4749
public string SchemeType => "JWT";
4850

@@ -151,7 +153,12 @@ public LoginResultData LoginUser(HttpRequestMessage request, LoginData loginData
151153
// save hash values in DB so no one with access can create JWT header from existing data
152154
var sessionId = NewSessionId;
153155
var now = DateTime.UtcNow;
154-
var renewalToken = EncodeBase64(Hasher.ComputeHash(Guid.NewGuid().ToByteArray()));
156+
string renewalToken = string.Empty;
157+
lock (hasherLock)
158+
{
159+
renewalToken = EncodeBase64(Hasher.ComputeHash(Guid.NewGuid().ToByteArray()));
160+
}
161+
155162
var ptoken = new PersistedToken
156163
{
157164
TokenId = sessionId,
@@ -381,7 +388,13 @@ private static string EncodeBase64(byte[] data)
381388

382389
private static string GetHashedStr(string data)
383390
{
384-
return EncodeBase64(Hasher.ComputeHash(TextEncoder.GetBytes(data)));
391+
string hash = string.Empty;
392+
lock (hasherLock)
393+
{
394+
hash = EncodeBase64(Hasher.ComputeHash(TextEncoder.GetBytes(data)));
395+
}
396+
397+
return hash;
385398
}
386399

387400
private LoginResultData UpdateToken(string renewalToken, PersistedToken ptoken, UserInfo userInfo)

0 commit comments

Comments
 (0)