我有一个位于API网关后面的API。在将请求传递到API之前,API网关会验证承载令牌。
我的API使用asp.net core 2.0本机身份验证和基于声明的授权框架。从JWT令牌获取声明的艰巨工作是由中间件进行的Microsoft.AspNetCore.Authentication.JwtBearer。
可以将该中间件配置为忽略令牌上的到期日期,并且还可以指定本地公共密钥,这样就不必联系令牌颁发机构来获取它,而是可以仅禁用令牌验证。令牌?
这将允许将未签名的令牌用于开发中的临时测试,并防止生产中的双重验证(网关和API)。
尝试这个。终于,经过大量的尝试,我终于开始工作了。
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;
}
Run Code Online (Sandbox Code Playgroud)
您可以使用设置令牌验证JwtBearerOptions.TokenValidationParameters。您可以检查类定义中的所有可用参数。
Microsoft.IdentityModel.Tokens.SecurityTokenHandler包含验证 时使用的一组参数Microsoft.IdentityModel.Tokens.SecurityToken。
如果您想完全禁用验证,请将 AllValidateXXX和bool 属性设置为 false:RequireXXX
.AddJwtBearer("<authenticationScheme>", configureOptions =>
{
options.TokenValidationParameters.ValidateActor = false;
options.TokenValidationParameters.ValidateAudience = false;
options.TokenValidationParameters.ValidateIssuerSigningKey = false;
...
}
Run Code Online (Sandbox Code Playgroud)
作为另一个选项,您可以通过将自己的实现设置为来覆盖默认令牌签名验证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; }
Run Code Online (Sandbox Code Playgroud)
其中SignatureValidator委托定义为:
public delegate SecurityToken SignatureValidator(string token, TokenValidationParameters validationParameters);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4176 次 |
| 最近记录: |