因此,我正在從一個來自服務A的網路呼叫中獲得一個JWT,以確保服務B的安全,并使用相同的令牌。 不幸的是,它使用了一個第三方庫,所以我不知道它發出的確切密鑰,但我可以看到它的有效載荷。 有什么辦法可以讓我的服務知道這個令牌沒有問題嗎? 我在Startup.ConfigureServices
中嘗試了這個方法services.AddAuthentication()
.AddJwtBearer(options =>
{
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ")?.Last() ??string.Empty。
如果(!string.IsNullOrEmpty(accessToken))
context.Token = accessToken;
回傳Task.CompletedTask。
}
};
});
現在這就得到了我所期望的JWT,在一個測驗案例中,讓我們這樣說。 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIwiaWF0IjoxNTE2MjM5MDIyLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0LmNvbSJ9.XzkQ9hQ0JyhQDpFZ00Ukc_5ickUmjxVUBvlMrcEeycw
這里沒有什么問題,"context.Token "也被設定了,但是當我這樣做的時候:
[Authorize(AuthenticationSchemes = "Bearer")]。
[Route("[controller]/[action]")]
public class JobsUpdateController : ControllerBase
當使用'[Authorize(AuthenticationSchemes="Bearer")]'時,我無論如何都會得到一個401。 有沒有辦法讓我做一個自定義的授權? 否則我想做一些長的形式來設定我自己的認證方法,也許做一個自定義屬性。 但我希望如果我知道'發行者'和我所期望的有效載荷中的其他幾個鍵,我就可以讓這個啟動作業。
uj5u.com熱心網友回復:
你可以在options.TokenValidationParameters中配置JWT驗證。
這不安全,而且你基本上允許幾乎所有的令牌。但不管怎樣,它是這樣的:
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(
options => {
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true, // `iss` claim。
ValidIssuers = new []{"https://localhost:1234"/span>},
ValidateAudience = false, // `aud` claim.
ValidateLifetime = false, // `exp`, `nbf` claim。
ValidateIssuerSigningKey = false, //簽名。
SignatureValidator = (token, parameters) => new JwtSecurityToken(token), //不驗證簽名。
};
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/315108.html
標籤:

