拦截初始 Ktor 身份验证路由
Intercept initial Ktor authenticate route
我正在尝试将 ktor oauth 设置为与 GitHub oauth 一起用于 GitHub 应用程序。
我想在安装 GitHub App 后对用户进行身份验证,所以
我在 GitHub 配置中选中了 Request user authorization (OAuth) during installation
复选框。此功能将获取 Callback URL
并向其发送初始请求。问题是,它必须与 oauth 进程中的 redirect URL
相同(ktor auth 配置中的 urlProvider
)。
我的授权配置:
install(Authentication) {
oauth("auth-oauth-github") {
urlProvider = { "$ngrokUrl/gh/oauth/callback" }
providerLookup = {
OAuthServerSettings.OAuth2ServerSettings(
name = "github",
authorizeUrl = "https://github.com/login/oauth/authorize",
accessTokenUrl = "https://github.com/login/oauth/access_token",
requestMethod = HttpMethod.Post,
clientId = System.getenv("GITHUB_CLIENT_ID"),
clientSecret = System.getenv("GITHUB_CLIENT_SECRET"),
passParamsInURL = true,
defaultScopes = listOf("user:email"),
)
}
client = httpClient
}
}
routing {
authenticate("auth-oauth-github") {
get("/gh/oauth/callback") {
// need to check some parameters for initial request
// and later for the second request need to retrieve principal
}
}
}
我遇到的问题是我必须分析来自 GitHub 的初始请求的参数,但 ktor auth 会自动重定向到 authorizeUrl
.
我的问题是:
- 你能为初始请求禁用自动重定向吗?
- 你能拦截获取必要数据的初始请求吗?
遗憾的是,无法使用 OAuthAuthenticationProvider
禁用到 authorizeUrl
的重定向。您可以为 authenticate
路由添加一个拦截器,以便在身份验证(重定向)发生之前注入您的代码。
authenticate("auth-oauth-github") {
val phase = PipelinePhase("MyPhase")
insertPhaseBefore(Authentication.AuthenticatePhase, phase)
intercept(phase) {
// Do your processing here
// call.request contains data for the initial request
}
// ...
}
我正在尝试将 ktor oauth 设置为与 GitHub oauth 一起用于 GitHub 应用程序。
我想在安装 GitHub App 后对用户进行身份验证,所以
我在 GitHub 配置中选中了 Request user authorization (OAuth) during installation
复选框。此功能将获取 Callback URL
并向其发送初始请求。问题是,它必须与 oauth 进程中的 redirect URL
相同(ktor auth 配置中的 urlProvider
)。
我的授权配置:
install(Authentication) {
oauth("auth-oauth-github") {
urlProvider = { "$ngrokUrl/gh/oauth/callback" }
providerLookup = {
OAuthServerSettings.OAuth2ServerSettings(
name = "github",
authorizeUrl = "https://github.com/login/oauth/authorize",
accessTokenUrl = "https://github.com/login/oauth/access_token",
requestMethod = HttpMethod.Post,
clientId = System.getenv("GITHUB_CLIENT_ID"),
clientSecret = System.getenv("GITHUB_CLIENT_SECRET"),
passParamsInURL = true,
defaultScopes = listOf("user:email"),
)
}
client = httpClient
}
}
routing {
authenticate("auth-oauth-github") {
get("/gh/oauth/callback") {
// need to check some parameters for initial request
// and later for the second request need to retrieve principal
}
}
}
我遇到的问题是我必须分析来自 GitHub 的初始请求的参数,但 ktor auth 会自动重定向到 authorizeUrl
.
我的问题是:
- 你能为初始请求禁用自动重定向吗?
- 你能拦截获取必要数据的初始请求吗?
遗憾的是,无法使用 OAuthAuthenticationProvider
禁用到 authorizeUrl
的重定向。您可以为 authenticate
路由添加一个拦截器,以便在身份验证(重定向)发生之前注入您的代码。
authenticate("auth-oauth-github") {
val phase = PipelinePhase("MyPhase")
insertPhaseBefore(Authentication.AuthenticatePhase, phase)
intercept(phase) {
// Do your processing here
// call.request contains data for the initial request
}
// ...
}