Файл cookie аутентификации сервера Haskell, используемый через браузер

Я пытался реализовать аутентификацию файлов cookie с использованием служебной аутентификации и использовать ее на своем веб-сайте. Я следил за README на сайте проекта GH https://github.com/haskell-servant/servant-auth и добавил простой Lucid HTML, содержащий форму, которая обращается к конечной точке входа в систему, а затем получает и сохраняет файл cookie в моем браузере.

data User = User String
    deriving (Eq, Show, Generic)

data Credentials = Credentials {
    credentialsUserName :: String,
    credentialsPassword :: String
} deriving (Eq, Show, Read, Generic)

instance ToJSON Credentials
instance ToJSON User
instance ToJWT User

instance FromJSON Credentials
instance FromJSON User
instance FromJWT User
instance FromForm Credentials

type Unprotected =
    "logMe" :> Get '[HTML] (Html ())
    :<|> "login" 
            :> ReqBody '[FormUrlEncoded] Credentials 
            :> Verb 'POST 204 '[JSON] (Headers '[ Header "Set-Cookie" SetCookie, Header "Set-Cookie" SetCookie] NoContent)

type Protected
   = "name" :> Get '[JSON] String

type AuthAPI =
    (Servant.Auth.Server.Auth '[Cookie] User :> Protected)
    :<|> Unprotected

Остальные части моего кода очень близки к фрагментам, представленным в README (при необходимости могу опубликовать). У меня проблемы с тем, что даже с файлом cookie в браузере я все еще не могу получить доступ к защищенной конечной точке. Я получаю AuthResult Indefinite. Я предполагаю, что мне не хватает крошечной части, которая отвечает за обработку файла cookie для преобразования пользователя. Как мне вписать это в мой код?


person Alojzy Leszcz    schedule 15.07.2020    source источник


Ответы (1)


Я также борюсь с той же проблемой, которая еще не решена, ссылка: https://github.com/DeepakKapiswe/Gyan-Lahari-Backend/blob/redisIntegration/src/App.hs

некоторые вещи, которые действительно болезненны при настройке, - это cors и httpOnly

недавно я столкнулся с тем фактом, что даже когда вы устанавливаете NotSecure в cookieSettings, serve-auth-server устанавливает внутренний флаг httpOnly здесь https://github.com/haskell-servant/servant-auth/blob/696fab268e21f3d757b231f0987201b539c52621/server-auth-server/src/Servant/Auth/Server/Internal/Cookie.hs#L127

таким образом, cookie, являющийся браузером httpOnly, не отправляет его обратно, когда вы тестируете локально через HTTP, а не HTTPS

это может иметь место в вашей настройке, в противном случае вы сможете получить доступ к защищенным конечным точкам после аутентификации.

person Deepak Kapiswe    schedule 16.07.2020
comment
Привет, спасибо за ответ. Я получил ответ от сопровождающего пакета здесь: github .com/haskell-servant/servant-auth/issues/166 И его предложение было точным. Кроме того, спасибо за подробную информацию о потенциальных подводных камнях, которые я могу ожидать увидеть в ближайшем будущем. Изменение cookieSettings помогло мне: cookieConfig :: CookieSettings cookieConfig = defaultCookieSettings { cookieIsSecure = NotSecure, cookieSameSite = SameSiteStrict, cookieXsrfSetting = Nothing } - person Alojzy Leszcz; 16.07.2020