在 Clojure 中执行用户身份验证和授权的首选方式是啥?
Posted
技术标签:
【中文标题】在 Clojure 中执行用户身份验证和授权的首选方式是啥?【英文标题】:what's the preferred way to perform user authentication and authorization in Clojure?在 Clojure 中执行用户身份验证和授权的首选方式是什么? 【发布时间】:2012-03-30 14:51:07 【问题描述】:我一直在开发 Clojure 中的 Web 应用程序作为一个副项目,我正在尝试弄清楚如何进行用户身份验证和授权。从我所做的谷歌搜索中,我听说了沙洲,但在阅读了沙洲上的两篇博文后(Part 1、Part 2),我留下的问题多于答案。我已经查看了source code 的4clojure,据我所知,他们自己滚动,问题是代码没有很好地注释,如果有的话。我想我需要推出自己的系统并使用沙条或 noir.session 来传递用户信息。有人可以指出我正确的方向吗?我觉得我错过了一些简单的东西。
【问题讨论】:
这里有一个关于 Clojure 安全状态问题的有用讨论:youtube.com/watch?v=CBL59w7fXw4 【参考方案1】:朋友还有一个替代品,叫做Buddy。
和朋友有什么区别?
Buddy 授权/身份验证设施更底层,更不固执己见,并允许在它们之上轻松构建其他高级抽象。从技术上讲,朋友抽象可以建立在好友之上
【讨论】:
【参考方案2】:Chas Emerick 的 Friend 库现已可用。它仍然相对较新,但看起来很有希望并且有很好的文档记录。
【讨论】:
【参考方案3】:对于身份验证,除了明显的“自己动手”之外,如果您想使用 OAUTH(例如通过 Twitter),我发现 https://github.com/mattrepl/clj-oauth 可以很好地工作。一旦您获得了用户信息,将其存储在某种会话对象中(通过ring-middleware-session 或类似的抽象)似乎是显而易见的事情。
对于授权,您链接到的博客文章中描述的方式 - 使用授权中间件(或您首选的 Web 堆栈提供的任何抽象 - 例如 Noir 中的 pre-route
)包装某些路由效果很好。
【讨论】:
【参考方案4】:我查看了4clojure login code,我认为它的实现方式非常清楚。基本上它是传统的 HTTP 身份验证。将表单中的用户/密码发布到 URL,检查用户名和密码,并使用可用于进一步请求的用户信息更新会话,以检查此会话是否适用于有效的登录用户。
这就是大多数网络应用身份验证的工作方式。现在这是情况的“做什么”部分,对于“如何做”,您可以使用 Web 框架提供的“原始”功能自行实现它,或者可能使用一些中间件来为您执行此操作以及提供一些用于自定义实现的钩子。
【讨论】:
以上是关于在 Clojure 中执行用户身份验证和授权的首选方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章