Skip to content

如何选择授权方式 ​

本页帮你根据“谁在调用、有没有用户、有没有浏览器”选出合适的授权流程,并标出每种流程在 wicket v0.1.4 中的实际支持程度。支持程度来自源码核对与实际运行,而不是发现文档的声明——两者在几处并不一致。

决策表 ​

场景典型例子推荐流程SetAllowedGrantTypesv0.1.4 状态
机器对机器,没有用户定时任务、内部微服务互调客户端凭据wicket.GrantTypesClientCredentials可用,已端到端验证
Web 服务端应用,有用户传统 Web 后台、BFF授权码 + PKCE(机密客户端)wicket.GrantTypesCode可用;宿主需提供登录页与登录 Cookie 处理器
SPA / 移动端,有用户单页应用、iOS / Android App授权码 + PKCE(公共客户端,RequireClientSecret = false)wicket.GrantTypesCode可用,同上
长期保持登录上述有用户的场景叠加 刷新令牌(offline_access)客户端设 AllowOfflineAccess可签发与使用,但 v0.1.4 尚未实现过期与轮换策略,需宿主补防护
无浏览器或输入不便的设备电视、命令行工具、IoT设备授权wicket.GrantTypesDeviceFlow不可用于生产:无内置设备授权端点,签发的令牌缺少作用域
后端发起、用户在另一台设备上确认柜台办理、呼叫中心核身CIBA(仅 poll)wicket.GrantTypesBackchannelAuthentication可用;必须替换默认用户校验器,用户确认由宿主实现
用户登出所有有用户的场景会话与登出—/connect/endsession 可用;前/后通道通知与 checksession 不生效

快速判断 ​

  1. 令牌代表谁? 只代表服务自己 → 客户端凭据。代表某个用户 → 继续往下。
  2. 用户此刻能在发起方的浏览器里操作吗? 能 → 授权码 + PKCE。不能 → 继续往下。
  3. 用户在另一台设备上确认,发起方是你的后端? 是 → CIBA。是一台没有浏览器的终端 → 设备授权(v0.1.4 中请改用 设备授权 页列出的替代方案)。

不推荐或默认关闭的方式 ​

方式说明
隐式流(response_type=token / id_token)代码仍支持,但令牌经由浏览器地址传递,新应用请用授权码 + PKCE。SetAllowedGrantTypes 不允许把 implicit 与 authorization_code 组合在一起
资源所有者密码(password)默认拒绝:未注入校验器时使用的是“不支持”的占位实现,发现文档的 grant_types_supported 中也不出现。确需兼容旧系统时通过 cfg.SetResourceOwnerValidator 注入
混合流(code id_token 等)代码仍支持,新应用没有使用理由

发现文档与实际实现的差异 ​

客户端库通常依据 /.well-known/openid-configuration 自动配置。v0.1.4 的发现文档中有几项声明与实际不符,接入时请以本站各流程页为准:

发现文档字段声明实际
device_authorization_endpoint/connect/deviceauthorization未注册,请求会落到宿主 handler
revocation_endpoint/connect/revocation未注册,请求会落到宿主 handler
frontchannel_logout_supported / backchannel_logout_supportedtrue均不会实际发出通知
check_session_iframe/connect/checksession页面存在,但授权响应不返回 session_state

完整字段说明见 发现文档。

所有流程共通的约定 ​

  • 令牌端点 POST /connect/token 只接受表单编码;客户端认证支持 client_secret_basic 与 client_secret_post。
  • v0.1.4 的令牌端点错误统一返回 HTTP 400(包括 invalid_client),响应体是 JSON,带 error、error_description 和一个 custom 字段。
  • 成功响应总是包含 id_token、refresh_token 两个键,未签发时值为空字符串。

相关阅读 ​

以 Apache License 2.0 发布 · 文档内容 © 2026 Wicket 作者