mirror of
https://github.com/TbT480jcspy/Deluxe-2023-Server-Code.git
synced 2026-09-08 22:51:28 -07:00
Movement
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
namespace DeluxeNET.Security
|
||||
{
|
||||
public class jwt
|
||||
{
|
||||
private readonly string _key = "CHANGE ME!";
|
||||
|
||||
public string GenerateToken(string userId)
|
||||
{
|
||||
var tokenHandler = new JwtSecurityTokenHandler();
|
||||
var key = Encoding.UTF8.GetBytes(_key);
|
||||
|
||||
var roles = new List<string>
|
||||
{
|
||||
"gameClient",
|
||||
"moderator",
|
||||
"screenshare",
|
||||
"keepsake",
|
||||
"developer"
|
||||
};
|
||||
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new Claim(ClaimTypes.NameIdentifier, userId)
|
||||
};
|
||||
|
||||
foreach (var role in roles)
|
||||
{
|
||||
claims.Add(new Claim(ClaimTypes.Role, role));
|
||||
}
|
||||
|
||||
var tokenDescriptor = new SecurityTokenDescriptor
|
||||
{
|
||||
Subject = new ClaimsIdentity(claims),
|
||||
Expires = DateTime.UtcNow.AddDays(7),
|
||||
SigningCredentials = new SigningCredentials(
|
||||
new SymmetricSecurityKey(key),
|
||||
SecurityAlgorithms.HmacSha256Signature
|
||||
)
|
||||
};
|
||||
|
||||
var token = tokenHandler.CreateToken(tokenDescriptor);
|
||||
return tokenHandler.WriteToken(token);
|
||||
}
|
||||
|
||||
public long? VerifyToken(string token)
|
||||
{
|
||||
|
||||
|
||||
if (string.IsNullOrEmpty(token)) return null;
|
||||
|
||||
token = token.Trim();
|
||||
|
||||
if (token.StartsWith("Bearer "))
|
||||
token = token.Substring("Bearer ".Length).Trim();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var tokenHandler = new JwtSecurityTokenHandler();
|
||||
var key = Encoding.UTF8.GetBytes(_key);
|
||||
|
||||
var validationParameters = new TokenValidationParameters
|
||||
{
|
||||
ValidateIssuer = false,
|
||||
ValidateAudience = false,
|
||||
ValidateLifetime = true,
|
||||
ValidateIssuerSigningKey = true,
|
||||
IssuerSigningKey = new SymmetricSecurityKey(key),
|
||||
ClockSkew = TimeSpan.Zero
|
||||
};
|
||||
|
||||
ClaimsPrincipal principal = tokenHandler.ValidateToken(
|
||||
token, validationParameters, out SecurityToken validatedToken
|
||||
);
|
||||
|
||||
var subClaim = principal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
|
||||
|
||||
if (long.TryParse(subClaim, out long playerId)) return playerId;
|
||||
|
||||
return null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex.Message);
|
||||
Console.WriteLine(ex.StackTrace);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user