在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路由组,插件会自动注册对应的处理逻辑,无需额外开发核心流程代码。 - 正确的使用方式是什么?
首先要明确你要对接的协议类型:- 如果你对接的是支持OpenID 2.0的服务商,只需要重写插件的登录UI即可,示例代码如下:
instance YesodAuth App where -- 其他基础配置(authRoute、loginHandler等)省略 authPlugins _ = [customFixedOpenId] where customFixedOpenId = authOpenId -- 替换默认的过时登录组件,直接跳转固定服务商 { apLogin = \authRoute -> toWidget [hamlet| <a href=@{authRoute $ forwardUrl "你的服务商OpenID端点地址"}> 点击跳转身份提供商登录 |] }- 如果你对接的是当前主流的OpenID Connect(OIDC)协议,注意OIDC和旧版OpenID 2.0是完全不同的协议,
authOpenId不支持OIDC,你应该使用yesod-auth-oauth2包配合对应服务商的OIDC配置实现认证,不要使用authOpenId插件。
内容的提问来源于stack exchange,提问作者BlueHarp
相关产品推荐
相关产品推荐

