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

金歌  论坛元老 | 2024-8-28 20:05:28 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1053|帖子 1053|积分 3159

“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截图:

认证服务器在捕获到 OAuth2Exception后会调用 WebResponseExceptionTranslator#translate()方法对异常进行翻译处理。
默认的翻译处理实现类是 DefaultWebResponseExceptionTranslator,处理完成后会调用 handleOAuth2Exception()方法将处理后的异常返回给前端,这就是我们之前看到的异常效果。
处理方法
认识Oauth2套路的同学应该知道了如何处理此类异常,就是**「自界说一个异常翻译类让其返回我们需要的自界说格式,然后将其注入到认证服务器中。」**
但是这种处理逻辑只能解决 OAuth2Exception异常,即前言部门中的**「授权模式异常」「账号密码类的异常」**,并不能解决我们客户端的异常。
客户端异常处理

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表