asp.net-core - 如何自定义 OpenIddict 产生的授权错误?
问题描述
我在 .NET Core 2 API 中使用 OpenIddict 进行身份验证。客户端我依靠任何 API 错误来遵循自定义方案。但是,当刷新令牌已经过时时,我似乎不知道如何自定义发回的错误。
永远不会到达/token端点,因此错误不在“我的控制”之下。
请求的结果是状态码 400,带有以下 JSON:
{"error":"invalid_grant","error_description":"The specified refresh token is no longer valid."}
我尝试使用自定义中间件来捕获所有状态代码(它确实如此),但在我的自定义中间件执行完成之前返回结果。
如何正确自定义错误或拦截以更改它?谢谢!
解决方案
您可以使用 OpenIddict 的事件模型在将令牌响应负载写入响应流之前对其进行自定义。这是一个例子:
MyApplyTokenResponseHandler.cs
public class MyApplyTokenResponseHandler : IOpenIddictServerEventHandler<ApplyTokenResponseContext>
{
public ValueTask HandleAsync(ApplyTokenResponseContext context)
{
var response = context.Response;
if (string.Equals(response.Error, OpenIddictConstants.Errors.InvalidGrant, StringComparison.Ordinal) &&
!string.IsNullOrEmpty(response.ErrorDescription))
{
response.ErrorDescription = "Your customized error";
}
return default;
}
}
启动.cs
services.AddOpenIddict()
.AddCore(options =>
{
// ...
})
.AddServer(options =>
{
// ...
options.AddEventHandler<ApplyTokenResponseContext>(builder =>
builder.UseSingletonHandler<MyApplyTokenResponseHandler>());
})
.AddValidation();
推荐阅读
- python - 以下代码给了我一个错误:'list' object has no attribute 'split'
- excel - 如何仅检索 Excel for Python 中的可见单元格?
- ios - Swift:如何编码对象,与原始对象比较只有不同的属性
- html - 如何插入仅给出 XPath 的 html 元素?
- javascript - 创建一个无限的水平滚动画廊
- javascript - 如何将“RegExp.test”部分应用于字符串?
- cuda - 如何在 CUDA 设备代码中使用 Try-Catch 之类的东西
- git - git log 显示所有_except_标签
- validation - 如何解决 createState 函数...返回旧的或无效的状态实例?
- java - 我正在编译电子商务应用程序,但在 gradle 控制台中出现以下错误