启动后更新 JwtBearerOptions
Update JwtBearerOptions After Startup
在我的程序中,我在启动时有 ConfigureServices
方法。
在那个函数中我有这个:
services.AddAuthentication(auth => {
auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
auth.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options => {
options.SaveToken = true;
options.Events = new JwtBearerEvents() {
OnAuthenticationFailed = c => {
Console.WriteLine("Auth Failed");
return Task.CompletedTask;
}
};
options.TokenValidationParameters = new TokenValidationParameters {
ValidateIssuer = true,
ValidIssuer = AppSettings.SignInSettings.IdentityUrl,
ValidateAudience = false,
//ValidAudience = config.JwtToken.Audience,
ValidateIssuerSigningKey = true,
//IssuerSigningKeys = new JsonWebKeySet(jwks).GetSigningKeys()
};
});
我的 IssuerSigningKeys
值是通过 .well-known/openid-configuration/jwks
从我的身份服务器获得的。
我遇到的问题是如何在启动完成后获取该值并将其设置为我的 JwtBearerOptions
?我必须在启动后进行 http 调用以获取值,因为该服务在 ConfigureServices
.
中不可用
我试过了
lifetime.ApplicationStarted.Register(OnApplicationStartedAsync(clientFactory,
appSettings, options).Wait);
这确实让我在启动后立即获得值,但我没有看到更新配置值本身的方法。我可以通过 IOptionsMonitor<JwtBearerOptions>
检索当前值。我可以在启动的 Configure
方法中配置 JwtBearerOptions
吗?
编辑:如果可行,我会post回答,但我认为最好的解决方案是将我在身份服务器上需要的 x509 证书传播到其他应用服务器,这样我就可以在启动。
解决方案是改变我尝试完成此任务的方式。
无法动态设置 IssuerSigningKey
。
我最终采用的解决方案是不再担心在客户端应用程序上验证 SigningKey
,而是对 API 进行自省。这是因为如果 SigningKey
在 UI 上无效,用户将一无所获。他们最多能看到通常隐藏的按钮或其他元素,但数据永远不会 return.
在我的程序中,我在启动时有 ConfigureServices
方法。
在那个函数中我有这个:
services.AddAuthentication(auth => {
auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
auth.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options => {
options.SaveToken = true;
options.Events = new JwtBearerEvents() {
OnAuthenticationFailed = c => {
Console.WriteLine("Auth Failed");
return Task.CompletedTask;
}
};
options.TokenValidationParameters = new TokenValidationParameters {
ValidateIssuer = true,
ValidIssuer = AppSettings.SignInSettings.IdentityUrl,
ValidateAudience = false,
//ValidAudience = config.JwtToken.Audience,
ValidateIssuerSigningKey = true,
//IssuerSigningKeys = new JsonWebKeySet(jwks).GetSigningKeys()
};
});
我的 IssuerSigningKeys
值是通过 .well-known/openid-configuration/jwks
从我的身份服务器获得的。
我遇到的问题是如何在启动完成后获取该值并将其设置为我的 JwtBearerOptions
?我必须在启动后进行 http 调用以获取值,因为该服务在 ConfigureServices
.
我试过了
lifetime.ApplicationStarted.Register(OnApplicationStartedAsync(clientFactory, appSettings, options).Wait);
这确实让我在启动后立即获得值,但我没有看到更新配置值本身的方法。我可以通过 IOptionsMonitor<JwtBearerOptions>
检索当前值。我可以在启动的 Configure
方法中配置 JwtBearerOptions
吗?
编辑:如果可行,我会post回答,但我认为最好的解决方案是将我在身份服务器上需要的 x509 证书传播到其他应用服务器,这样我就可以在启动。
解决方案是改变我尝试完成此任务的方式。
无法动态设置 IssuerSigningKey
。
我最终采用的解决方案是不再担心在客户端应用程序上验证 SigningKey
,而是对 API 进行自省。这是因为如果 SigningKey
在 UI 上无效,用户将一无所获。他们最多能看到通常隐藏的按钮或其他元素,但数据永远不会 return.