金歌 发表于 2024-8-28 20:05:28

SpringCloud Alibaba实战二十七 - Oauth2认证服务器自界说异常

“error”: “unsupported_grant_type”,
“error_description”: “Unsupported grant type: password1”
}
密码错误
在认证时故意输错 username 或 password 会出现如下异常错误:
{
“error”: “invalid_grant”,
“error_description”: “Bad credentials”
}
客户端错误
在认证时故意输错 client_id 或 client_secret
{
“error”: “invalid_client”,
“error_description”: “Bad client credentials”
}
上面的返回效果很不友好,而且前端代码也很难判定是什么错误,所以我们需要对返回的错误进行同一的异常处理,让其返回同一的异常格式。
问题分析
<hr> 如果只关注解决方案,可以直接跳转到解决方案模块!
OAuth2Exception异常处理

在Oauth2认证服务器中认证逻辑最终调用的是 TokenEndpoint#postAccessToken()方法,而一旦认证出现 OAuth2Exception异常则会被 handleException()捕获到异常。如下图展示的是当出现用户密码异常时debug截图:
https://i-blog.csdnimg.cn/blog_migrate/63c753add249a63658cb10686e3eb080.png
认证服务器在捕获到 OAuth2Exception后会调用 WebResponseExceptionTranslator#translate()方法对异常进行翻译处理。
默认的翻译处理实现类是 DefaultWebResponseExceptionTranslator,处理完成后会调用 handleOAuth2Exception()方法将处理后的异常返回给前端,这就是我们之前看到的异常效果。
处理方法
认识Oauth2套路的同学应该知道了如何处理此类异常,就是**「自界说一个异常翻译类让其返回我们需要的自界说格式,然后将其注入到认证服务器中。」**
但是这种处理逻辑只能解决 OAuth2Exception异常,即前言部门中的**「授权模式异常」和「账号密码类的异常」**,并不能解决我们客户端的异常。
客户端异常处理

客户端认证的异常是发生在过滤器 ClientCredentialsTokenEndpointFilter上,其中有后置添加失败处理方法,末了把异常交给 OAuth2Authenticatio

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: SpringCloud Alibaba实战二十七 - Oauth2认证服务器自界说异常