Ignore JWT Bearer token signature (i.e. don't validate token)
Try this. Finally, I got it to work after so much of trying.
public TokenValidationParameters CreateTokenValidationParameters()
{
var result = new TokenValidationParameters
{
ValidateIssuer = false,
ValidIssuer = ValidIssuer,
ValidateAudience = false,
ValidAudience = ValidAudience,
ValidateIssuerSigningKey = false,
//IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(SecretKey)),
//comment this and add this line to fool the validation logic
SignatureValidator = delegate(string token, TokenValidationParameters parameters)
{
var jwt = new JwtSecurityToken(token);
return jwt;
},
RequireExpirationTime = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
};
result.RequireSignedTokens = false;
return result;
}
You may setup token validation using JwtBearerOptions.TokenValidationParameters
. You could check all available parameters from the class definition.
Contains a set of parameters that are used by a
Microsoft.IdentityModel.Tokens.SecurityTokenHandler
when validating aMicrosoft.IdentityModel.Tokens.SecurityToken
.
Set All ValidateXXX
and RequireXXX
bool properties to false if you want to disable validation at all:
.AddJwtBearer("<authenticationScheme>", configureOptions =>
{
options.TokenValidationParameters.ValidateActor = false;
options.TokenValidationParameters.ValidateAudience = false;
options.TokenValidationParameters.ValidateIssuerSigningKey = false;
...
}
As an another option you can override the default token signature validation by setting own implementation to JwtBearerOptions.SignatureValidator
:
// Gets or sets a delegate that will be used to validate the signature of the token.
//
// Remarks:
// If set, this delegate will be called to signature of the token, instead of normal
// processing.
public SignatureValidator SignatureValidator { get; set; }
where SignatureValidator
delegate is defined as:
public delegate SecurityToken SignatureValidator(string token, TokenValidationParameters validationParameters);