gpt4 book ai didi

authentication - ASP.NET Core 3.1 - AddJwtBearer、OnTokenValidated 事件在失败时不考虑自定义消息

转载 作者:行者123 更新时间:2023-12-05 06:55:25 25 4
gpt4 key购买 nike

如果请求中提供了不记名 token ,我有一个场景需要重新创建委托(delegate)人。为此,我使用 OnTokenValidated 事件来执行一些自定义逻辑(如果持有者有效)。我检查用户电子邮件是否经过验证,如果是,我将自定义声明添加到用户身份,然后我可以稍后在同一请求期间访问它,并使用 Controller 和操作上的授权属性。

但是,如果电子邮件未经过验证,我会尝试返回一条自定义消息,但我会不断收到“未经授权”的回复,即使此代码已被点击并使用首选消息也是如此。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = customDomain;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = true,
ValidAudiences = audiences,
ValidateIssuer = true,
ValidIssuers = issuers
};

options.Events = new JwtBearerEvents
{
OnTokenValidated = async (context) =>
{
var user = context.Principal;

//Check if already restored during current request
if (user.GetDefaultUserPrincipal() == null)
{
var securityManager = context.HttpContext.RequestServices.GetRequiredService<ISecurityManager>();
var authResponse = await securityManager.AuthenticateMarketplaceFromBearerRequestAsync(user);

if(!authResponse.IsAuthenticated)
{
context.Fail(authResponse.Message);
}
}
}
};
});

我是不是漏掉了什么?我也试过抛出异常并在 AuthenticationFailed 事件中处理该响应,但我得到了同样的结果。

或者,我正在尝试创建一个自定义策略来执行此检查,只要我仍然可以返回自定义响应消息即可。

最佳答案

为了在身份验证失败时显示您的自定义消息,您可以将其写入 AuthenticationFailedContext 上下文 对象的响应。

...

if (!authResponse.IsAuthenticated){
// set the content-type of the response
context.Response.ContentType = "application/json";

// prepare your custom data
var data = new { MyCustomMessage = authResponse.Message };

// user serializer to form your data to string. Here I used Newtonsoft.Json
var jsonResult = JsonConvert.SerializeObject(data);

// Write the jsonresult to the response. Make sure this returns a Task
context.Response.WriteAsync(jsonResult);
}

...

关于authentication - ASP.NET Core 3.1 - AddJwtBearer、OnTokenValidated 事件在失败时不考虑自定义消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65351526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com