您可以自定义 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

自定义 laravel sanctum 未授权响应

WCF Rest 自托管证书安全服务返回 401 未经授权

Rapidapi & 401 未经授权的响应

401 未经授权响应 CORS 预检选项请求

如果刷新(JWT)令牌未经授权(401响应),AngularJS重定向到登录