WebApi服务器启动后只访问一次IdentityServer
WebApi server only accesses IdentityServer once after it starts
美好的一天。
- 我使用 IdentityServer 请求访问令牌
- 我在启动 Webapi 服务器后访问我的 API。
- 之后,使用当前的访问令牌,我可以访问我的 api,即使 IdentityServer 已关闭。
我的问题:这是正确的工作逻辑吗?难道不应该在每次调用我的 api 时调用 IdentityServer 并检查访问令牌吗?
如果没有,如果我的用户凭据已更改并且我需要更新令牌,我该如何拒绝访问令牌?
Startup.cs:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers().RequireAuthorization("ApiScope");
//.RequireAuthorization("AdminSecure");
});
}
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = Configuration.GetValue<string>("IdentityServerUrl");
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
policy.RequireClaim("client_id", "secret"));
options.AddPolicy("UserSecure", policy =>
policy.RequireClaim("roleType", "userCode"));
options.AddPolicy("AdminSecure", policy =>
policy.RequireClaim("roleType", "adminCode"));
});
}
这是正确的行为,您的 API 可以从 IdentityServer 离线工作。 API 只需要从 IdentityServer 下载签名密钥,API 默认情况下会将它们缓存 24 小时,以便验证它们是否有效。
您描述的问题已通过使用短期访问令牌(例如 1-10 分钟)解决?然后在客户端使用刷新令牌更新令牌。
或者您的 API 可以手动要求 token introspection endpoint 检查访问令牌是否仍然有效。
美好的一天。
- 我使用 IdentityServer 请求访问令牌
- 我在启动 Webapi 服务器后访问我的 API。
- 之后,使用当前的访问令牌,我可以访问我的 api,即使 IdentityServer 已关闭。
我的问题:这是正确的工作逻辑吗?难道不应该在每次调用我的 api 时调用 IdentityServer 并检查访问令牌吗?
如果没有,如果我的用户凭据已更改并且我需要更新令牌,我该如何拒绝访问令牌?
Startup.cs:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers().RequireAuthorization("ApiScope");
//.RequireAuthorization("AdminSecure");
});
}
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = Configuration.GetValue<string>("IdentityServerUrl");
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
policy.RequireClaim("client_id", "secret"));
options.AddPolicy("UserSecure", policy =>
policy.RequireClaim("roleType", "userCode"));
options.AddPolicy("AdminSecure", policy =>
policy.RequireClaim("roleType", "adminCode"));
});
}
这是正确的行为,您的 API 可以从 IdentityServer 离线工作。 API 只需要从 IdentityServer 下载签名密钥,API 默认情况下会将它们缓存 24 小时,以便验证它们是否有效。
您描述的问题已通过使用短期访问令牌(例如 1-10 分钟)解决?然后在客户端使用刷新令牌更新令牌。
或者您的 API 可以手动要求 token introspection endpoint 检查访问令牌是否仍然有效。