我创建了一个类来验证我自己的令牌。在该类中,我需要使用一项服务,该服务先前已在startup.cs
中与services.AddScoped
添加在一起。我该怎么办?
x.SecurityTokenValidators.Add(new DynamicKeyJwtValidationHandler());
在DynamicKeyJwtValidationHandler类中,我需要使用服务。
public class DynamicKeyJwtValidationHandler : JwtSecurityTokenHandler, ISecurityTokenValidator
{
public SecurityKey GetKeyForClaimedId(string claimedId)
{
throw new NotImplementedException();
}
public override ClaimsPrincipal ValidateToken(string token, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
{
ClaimsPrincipal cp = new ClaimsPrincipal();
validatedToken = null;
try
{
cp = base.ValidateToken(token, validationParameters, out validatedToken);
} catch (Exception) {}
return cp;
}
}
答案 0 :(得分:1)
在类的构造函数中使用依赖注入
public class DynamicKeyJwtValidationHandler : JwtSecurityTokenHandler, ISecurityTokenValidator
{
private readonly YourService _service
public DynamicKeyJwtValidationHandler(YourService service){
_service = service
}
public SecurityKey GetKeyForClaimedId(string claimedId)
{
throw new NotImplementedException();
}
public override ClaimsPrincipal ValidateToken(string token, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
{
ClaimsPrincipal cp = new ClaimsPrincipal();
validatedToken = null;
try
{
cp = base.ValidateToken(token, validationParameters, out validatedToken);
} catch (Exception) {}
return cp;
}
}
答案 1 :(得分:0)
我希望这会有所帮助。
public class DynamicKeyJwtValidationHandler : JwtSecurityTokenHandler, ISecurityTokenValidator
{
public SecurityKey GetKeyForClaimedId(string claimedId)
{
throw new NotImplementedException();
}
public override ClaimsPrincipal ValidateToken(string token, TokenValidationParameters validationParameters, out SecurityToken validatedToken)
{
//
// if your class is in the different assembly then
// Assembly.GetEntryAssembly().GetType("yourNamespace.YourClass");
Type type = Assembly.GetEntryAssembly().GetType("YourClass");
object entity = Activator.CreateInstance(type);
var instanceOfClass = (YourClass)entity;
instanceOfClass.Go();
//
ClaimsPrincipal cp = new ClaimsPrincipal();
validatedToken = null;
try
{
cp = base.ValidateToken(token, validationParameters, out validatedToken);
}
catch (Exception) { }
return cp;
}
}
public class YourClass
{
public void Go()
{
}
}