您可以自定义 Ktor 401 - 未经授权的响应吗?
Posted
技术标签:
【中文标题】您可以自定义 Ktor 401 - 未经授权的响应吗?【英文标题】:Can you customize Ktor 401 - Unauthorized Response? 【发布时间】:2021-09-03 13:28:16 【问题描述】:在 Ktor 上实现 Basic Authentication 并配置 Provider 时,通过返回非 null 来验证 凭据是否合法 Principal
,如下例所示:
install(Authentication)
basic("auth-basic")
realm = "Access to the '/' path"
validate credentials ->
if (credentials.name == "fernando" && credentials.password == "foobar")
UserIdPrincipal(credentials.name)
else
null
如果凭据无效并返回 null,则 Ktor 通过触发 401 - Unauthorized
自动与客户端通信,这在行为方面是预期的......
但我无法提供/添加任何额外信息,例如问题出在哪里:用户名或密码。
关于如何减轻这种情况的任何想法?
【问题讨论】:
你试过StatusPages吗? 这可能与youtrack.jetbrains.com/issue/KTOR-2404有关 非常感谢您的提示。我通过使用 [StatusPages][1] 插件来适当地响应任何故障状态来解决。另一个提示是不要忘记传递相同的HttpStatusCode.Unauthorized
,否则您的响应将包含您的对象但将包含200
代码。 [1]:ktor.io/docs/status-pages.html
【参考方案1】:
要解决此问题,您可以通过将其安装在应用程序类上来使用 StatusPages。
如下:
install(StatusPages)
status(HttpStatusCode.Unauthorized)
call.respond(HttpStatusCode.Unauthorized, "Your Response Object")
更多信息请阅读以下链接:https://ktor.io/docs/status-pages.htmlhttps://github.com/ktorio/ktor/issues/366
【讨论】:
以上是关于您可以自定义 Ktor 401 - 未经授权的响应吗?的主要内容,如果未能解决你的问题,请参考以下文章
基本身份验证应在邮递员中响应 500(授权),但 401 Unauthorized 可以正常工作。使用 ktor intellij mongodb