Files
icarus/Services/TokenService.cs
T
Kun Deng 2cc13ac9bb Code changes
Did not run code. Had a spur of the moment to try something out.
2022-08-25 20:56:12 -04:00

82 lines
3.0 KiB
C#

// using JwtAuthentication.AsymmetricEncryption.Certificates;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Linq;
using Microsoft.IdentityModel.Tokens;
using Microsoft.Extensions.Configuration;
using Icarus;
using Icarus.Certs;
using Icarus.Database.Contexts;
using Icarus.Repositories;
using Icarus.Models.Shared;
// using JwtAuthentication.Shared;
// using JwtAuthentication.Shared.Models;
namespace Icarus.Services
{
public class TokenService
{
private Microsoft.Extensions.Configuration.IConfiguration _configuration;
private readonly UserRepository userRepository;
private readonly UserContext _userContext;
private readonly Icarus.Certs.SigningAudienceCertificate signingAudienceCertificate;
private string _publickKeyPath = string.Empty;
/**
public TokenService(UserRepository userRepository)
{
this.userRepository = userRepository;
signingAudienceCertificate = new SigningAudienceCertificate();
}
*/
/**
public TokenService(UserRepository userRepository, Microsoft.Extensions.Configuration.IConfiguration configuration)
{
this._configuration = configuration;
this.userRepository = userRepository;
signingAudienceCertificate = new Icarus.Certs.SigningAudienceCertificate();
_publickKeyPath = configuration["RSAKeys:PublicKeyPath"];
}
*/
public TokenService(Microsoft.Extensions.Configuration.IConfiguration configuration)
{
this._configuration = configuration;
// this.userRepository = userRepository;
this._userContext = new UserContext(configuration.GetConnectionString("DefaultConnection"));
signingAudienceCertificate = new Icarus.Certs.SigningAudienceCertificate();
_publickKeyPath = configuration["RSAKeys:PublicKeyPath"];
}
public string GetToken(string username)
{
// var user = userRepository.GetUser(username);
var user = _userContext.Users.FirstOrDefault(usr => usr.Username.Equals(username));
SecurityTokenDescriptor tokenDescriptor = GetTokenDescriptor(user);
var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken securityToken = tokenHandler.CreateToken(tokenDescriptor);
string token = tokenHandler.WriteToken(securityToken);
return token;
}
private SecurityTokenDescriptor GetTokenDescriptor(Icarus.Models.User user)
{
const int expiringDays = 7;
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(user.Claims()),
Expires = DateTime.UtcNow.AddDays(expiringDays),
SigningCredentials = signingAudienceCertificate.GetAudienceSigningKey(_publickKeyPath)
};
return tokenDescriptor;
}
}
}