首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当使用Microsoft.Identity.Web时,在401个未经授权的响应中包括自定义WWW认证头

当使用Microsoft.Identity.Web时,在401个未经授权的响应中包括自定义WWW认证头
EN

Stack Overflow用户
提问于 2021-11-03 18:44:42
回答 2查看 634关注 0票数 2

按照有关如何使MS Office连接到我的Asp.NET核心Web的说明,我试图为失败的身份验证提供一个登录重定向到MS。在questionsanswers之后,我试图在WWW-Authenticate标头属性中包含登录重定向信息。我的Web受到Azure和Microsoft.Identity.Web库的保护。当身份验证失败并且中间件返回401未经授权的响应时,标头确实包含WWW-Authenticate属性,但它的值仅为Bearer

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

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

EN

回答 2

Stack Overflow用户

发布于 2021-11-04 15:11:10

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

在我的Startup.cs:

代码语言:javascript
运行
复制
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);
    };
});
票数 1
EN

Stack Overflow用户

发布于 2022-04-30 21:34:05

原来的答案使我走上了正确的轨道。一旦我知道如何配置JwtBearerOptions.Challenge属性,实际上要做到这一点非常简单:

代码语言:javascript
运行
复制
services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
    options.Challenge = $"Bearer authorization_uri=\"{authorizationUri}\"";
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69830202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档