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

在Yesod框架中如何正确使用authOpenId插件实现OpenId认证?

关于yesod-auth中authOpenId插件的使用说明

核心结论

yesod-auth提供的authOpenId是完整的OpenID 1.0/2.0协议实现,并非仅供参考的模板,你遇到的问题源于它的默认UI设计适配的是早已过时的老式OpenID使用场景,和当前主流的身份认证协议场景不匹配。

常见疑问解答

  • 为什么默认页面有失效的Yahoo相关硬编码?
    这个默认UI是早年OpenID 2.0流行时期的产物,当时主流服务商都支持用户输入个人OpenID URL完成登录,现在这类服务几乎全部下线,所以默认模板的提示文本确实已经失效,你可以完全自定义登录UI,不需要使用默认提供的内容。
  • 是否需要自行编写路由、跳转、回调等核心逻辑?
    不需要。authOpenId已经封装了所有OpenID协议核心流程:包括提供商端点发现、跳转请求构造、回调签名校验、用户身份信息提取等,你只需要在路由配置中引入默认的auth路由组,插件会自动注册对应的处理逻辑,无需额外开发核心流程代码。
  • 正确的使用方式是什么?
    首先要明确你要对接的协议类型:
    1. 如果你对接的是支持OpenID 2.0的服务商,只需要重写插件的登录UI即可,示例代码如下:
    instance YesodAuth App where
      -- 其他基础配置(authRoute、loginHandler等)省略
      authPlugins _ = [customFixedOpenId]
        where
          customFixedOpenId = authOpenId
            -- 替换默认的过时登录组件,直接跳转固定服务商
            { apLogin = \authRoute -> toWidget [hamlet|
              <a href=@{authRoute $ forwardUrl "你的服务商OpenID端点地址"}>
                点击跳转身份提供商登录
            |]
            }
    
    1. 如果你对接的是当前主流的OpenID Connect(OIDC)协议,注意OIDC和旧版OpenID 2.0是完全不同的协议,authOpenId不支持OIDC,你应该使用yesod-auth-oauth2包配合对应服务商的OIDC配置实现认证,不要使用authOpenId插件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:00