0

按照有关使 MS Office 连接到我的 Asp.NET Core Web API 的说明,我正在尝试向 MS Office 提供登录重定向以失败的身份验证。以下问题答案我试图在WWW-Authenticate标题属性中包含登录重定向信息。我的 Web API 受 Azure AD 和Microsoft.Identity.Web库的保护。当身份验证失败并且中间件返回 401 Unauthorized 响应时,标头确实包含该WWW-Authenticate属性,但其值为 only Bearer

问:如何更新标头信息以包含必要的附加重定向信息?

我试图在 API 上实现一个属性,该属性派生自IAsyncAuthorizationFilter并访问其中的响应标头。但是,在调用此属性之前,中间件已经返回 401。

4

1 回答 1

0

我通过自定义JwtBearerOptions配置取得了进展。然而,这种方法会创建一个额外的标题项,而不是覆盖标准值。结果,我现在在响应标头中有 2 个 KeyValuePairs 用于相同的键,这可能会产生意想不到的结果。

在我的 Startup.cs 中:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration)

services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
    var existingOnChallengeHandler = options.Events.OnChallenge;
    options.Events.OnChallenge = async context =>
    {
        await existingOnChallengeHandler(context);

        string headerInfo = context.Options.Challenge;
        headerInfo += " resource=\"https://management.azure.com/\"";
        context.Response.Headers.Append(HeaderNames.WWWAuthenticate, headerInfo);
    };
});
于 2021-11-04T15:11:10.423 回答