.NET Core API 使用 Microsoft Identity Platform returns 200 当 OIDC 访问令牌已过期

.NET Core API using Microsoft Identity Platform returns 200 when OIDC access token has expired

我在 .NET Core 中创建了一个 API,并且我正在使用 Microsoft Identity Platform 进行身份验证。一切正常,但是当我的访问令牌过期时,我的方法仍然是 return http 状态 200,但没有结果,但我希望它们变成 return 401。

在 Startup class 的 ConfigureServices 方法中,我通过添加以下行来初始化身份验证:

services.AddMicrosoftIdentityWebApiAuthentication(Configuration);

并且在 Configure 方法中我调用了 app.UseAuthentication()app.UseAuthorization()。最后,在控制器中,方法使用授权属性:

[HttpGet]
[Authorize]
public ActionResult<IEnumerable<string>> Get()

因此,当使用过期的不记名令牌调用 Get 方法时,我希望该方法 return 返回 401,但我得到的是 200,但没有结果。有什么想法吗?

无法分辨 Microsoft 身份,但在其他身份提供者中你应该有类似的东西

services.AddAuthentication("OIDC")
                .AddJwtBearer("OIDC",
                                options =>
                                {
                                    options.Authority = authority;
                                    options.TokenValidationParameters = new TokenValidationParameters()
                                                                    {
                                                                        ValidateAudience = true,
                                                                        ValidAudiences = validAudiences,
                                                                        ValidateLifetime = true,
                                                                        ValidateIssuer = true,
                                                                        ValidIssuer = validIssuer,
                                                                        NameClaimType = "user",
                                                                        ValidateIssuerSigningKey = true
                                                                    };
                                });

注意 TokenValidationParameters 中有一个 ValidateLifeTime 属性 必须设置为 true

另见

原来是中间件的顺序问题。我调用了 app.UseAuthentication()app.UseAuthorization() 之间的自定义中间件导致了这个问题。