按照有关如何使MS Office连接到我的Asp.NET核心Web的说明,我试图为失败的身份验证提供一个登录重定向到MS。在questions和answers之后,我试图在WWW-Authenticate
标头属性中包含登录重定向信息。我的Web受到Azure和Microsoft.Identity.Web
库的保护。当身份验证失败并且中间件返回401未经授权的响应时,标头确实包含WWW-Authenticate
属性,但它的值仅为Bearer
。
Q:如何更新标头信息以包含必要的附加重定向信息?
我尝试在API上实现一个从IAsyncAuthorizationFilter
派生的属性,并在其中访问响应头。但是,在调用此属性之前,中间件已经返回了401。
发布于 2021-11-04 15:11:10
我通过自定义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);
};
});
发布于 2022-04-30 21:34:05
原来的答案使我走上了正确的轨道。一旦我知道如何配置JwtBearerOptions.Challenge
属性,实际上要做到这一点非常简单:
services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.Challenge = $"Bearer authorization_uri=\"{authorizationUri}\"";
}
https://stackoverflow.com/questions/69830202
复制相似问题