【发布时间】:2014-09-06 08:52:04
【问题描述】:
我正在尝试设置我的 yesod 网络服务器的暂存实例,我想知道是否有一些简单的方法可以保护整个站点的密码。具体来说,我希望能够提示那些导航到我的网站的人提供凭据。在他们进行身份验证后,它应该可以作为典型站点运行。但如果他们无法验证自己的身份,他们应该什么也看不到。
【问题讨论】:
标签: authentication haskell passwords yesod
我正在尝试设置我的 yesod 网络服务器的暂存实例,我想知道是否有一些简单的方法可以保护整个站点的密码。具体来说,我希望能够提示那些导航到我的网站的人提供凭据。在他们进行身份验证后,它应该可以作为典型站点运行。但如果他们无法验证自己的身份,他们应该什么也看不到。
【问题讨论】:
标签: authentication haskell passwords yesod
为了扩展@MichaelSnoyman 的回答,以下是我实现 WAI HTTP Auth 中间件的方式:
从脚手架站点,我去了Application.hs,它已经设置了一些日志中间件,如下所示:
makeApplication :: AppConfig DefaultEnv Extra -> IO Application
makeApplication conf = do
foundation <- makeFoundation conf
-- Initialize the logging middleware
logWare <- mkRequestLogger def
{ outputFormat =
if development
then Detailed True
else Apache FromSocket
, destination = RequestLogger.Logger $ loggerSet $ appLogger foundation
}
-- Create the WAI application and apply middlewares
app <- toWaiAppPlain foundation
return $ logWare app
为了添加 HTTP 身份验证,我引用了 Yesod 书的 chapter on WAI 和 Michael 引用的 HttpAuth docs。文档将此作为使用 HttpAuth 中间件的示例:
basicAuth (\u p -> return $ u == "michael" && p == "mypass") "My Realm"
我可以在应用日志中间件后将其粘贴到右下方:
import qualified Network.Wai.Middleware.HttpAuth as HttpAuth
makeApplication :: AppConfig DefaultEnv Extra -> IO Application
makeApplication conf = do
foundation <- makeFoundation conf
-- Initialize the logging middleware
logWare <- mkRequestLogger def
{ outputFormat =
if development
then Detailed True
else Apache FromSocket
, destination = RequestLogger.Logger $ loggerSet $ appLogger foundation
}
-- Create the WAI application and apply middlewares
app <- toWaiAppPlain foundation
return $ logWare $ HttpAuth.basicAuth (\u p -> return $ u == "michael" && p == "mypass") "My Realm" $ app
这是 Safari 中的样子:
这种身份验证并不适合普通用户,但它非常适合锁定供内部使用的网站。这也是机器(监控服务器、脚本)向您的服务器进行身份验证的一种简单方法。
【讨论】:
您可以使用 http auth 中间件。
http://hackage.haskell.org/package/wai-extra-3.0.1/docs/Network-Wai-Middleware-HttpAuth.html
抱歉,为了简洁,在手机上。
【讨论】: