You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用Directus文档给出的路由通过Keycloak提供商登录,正确的API登录路由是什么?

解决Directus OAuth提供商登录API路由问题

我明白你遇到的困扰了——Web界面能通过Keycloak正常登录,但调用文档里的路由却报错。其实问题出在OAuth登录的API流程和传统用户名密码登录不一样,Directus的文档可能没把这个细节说透,我来给你捋清楚正确的步骤:

正确的OAuth登录API路由流程

Directus的OAuth2提供商登录是基于重定向授权流程的,不是直接POST到/auth/login/<provider>(这个路由确实不存在),而是分两步走:

1. 第一步:获取授权跳转链接

你需要发起一个GET请求到以下路由,让用户跳转到Keycloak的登录页面:

/auth/oauth/<your-provider-alias>

这里的<your-provider-alias>是你在Directus后台配置Keycloak时设置的ID/别名(不是固定的keycloak,要看你自己的配置)。比如你配置Keycloak时填的ID是keycloak,那路由就是/auth/oauth/keycloak。

请求时要带上redirect_uri参数,指定用户登录Keycloak后要跳转回的你的应用地址,比如:

GET https://your-directus-domain.com/auth/oauth/keycloak?redirect_uri=https://your-app.com/keycloak-callback

2. 第二步:处理回调获取令牌

用户在Keycloak完成登录后,会被自动重定向到你指定的redirect_uri,并且URL里会带上一个code参数。这时候你需要发起POST请求到回调路由,用这个code换取Directus的访问令牌:

POST /auth/oauth/<your-provider-alias>/callback

请求Body需要包含以下参数(用application/x-www-form-urlencoded格式):

  • code: 回调URL里带的授权码
  • redirect_uri: 和第一步里完全一致的跳转地址

举个具体的例子,假设你的提供商别名是keycloak,回调地址是https://your-app.com/callback,那么请求就是:

POST https://your-directus-domain.com/auth/oauth/keycloak/callback
Content-Type: application/x-www-form-urlencoded

code=abc123xyz&redirect_uri=https://your-app.com/callback

这个请求会返回包含access_token、refresh_token的响应,之后你就可以用这些令牌调用Directus的其他API了。

为什么Web界面能正常登录?

Directus的前端已经封装了整个OAuth重定向流程:点击登录按钮后自动跳转到Keycloak,登录完成后处理回调并获取令牌,所以你看不到背后的API调用细节。

注意事项

  • 一定要确认你用的<your-provider-alias>和Directus后台配置的Keycloak的ID完全一致(在Directus设置 → Authentication → 找到你的Keycloak配置,查看ID字段)
  • redirect_uri必须和你在Keycloak客户端配置里的“Valid Redirect URIs”以及Directus提供商配置里的“Redirect URI”保持一致,否则会报错

内容的提问来源于stack exchange,提问作者KinitaL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:02:31