我用RestHelper電梯(斯卡拉Webframework)提供了web應用以及web服務。用戶可以使用Web應用程序的HTML表單,也可以使用REST API替代地編寫自己的服務客戶端。 html表單將主要通過JQuery使用帶有AJAX的REST API來實現,以避免重複的功能。我想用HTTP Basic Auth(或類似的東西)來保護REST API。我還希望看到使用電梯默認登錄表單登錄到Web應用程序的用戶無需執行額外的基本身份驗證(因爲他們已經在基於表單的登錄期間創建了會話)。我如何使用Lift來實現這一點?Scala Lift:基於表單的登錄和HTTP基本身份驗證的統一身份驗證?
目前,我設置HTTP基本驗證:
// Use Basic Authentication
LiftRules.authentication = HttpBasicAuthentication("lift") {
case (email, password, req) => {
User.find(By(User.email, email)) match {
case Full(user) if user.password.match_?(password) => {
userRoles(List(AuthRole("user"), AuthRole(user.id.toString)))
User.logUserIn(user)
true
}
case _ => false
}
}
}
,並確定我的保護REST API資源如下:
// Protect REST API resources with Basic Auth (but only if user has no Session)
LiftRules.httpAuthProtectedResource.prepend{
case Req("api" :: "users" :: userId :: _, _, _) =>
User.currentUser match {
// if the user has already signed in per form we grant access
case Full(user) => Empty
case _ => Full(AuthRole(userId))
}
}
不幸的是,這並不工作和User.currentUser始終沒有返回用戶。我在某處讀過,這是由於用戶會話在請求生命週期的這個階段尚未初始化。
是否有電梯任何方式只是保護資源indenpendtly其身份驗證方法的使用?原則上我不在乎用戶如何進行身份驗證(表單身份驗證,基本身份驗證,摘要身份驗證)。如果他使用基於表單的登錄進行身份驗證,當他嘗試訪問REST API資源時(例如,Web應用程序的HTML表單在對REST API進行AJAX調用時會這樣做),我不想用基本身份驗證來挑戰他。
有一個在使用基本身份驗證是否會有jQuery的要求,這將必須包括這樣的密碼是沒有意義的。人們將只能讀取該密碼並進入您的網站 – fmpwizard 2012-02-19 14:01:55
正確。這就是爲什麼我想使用基本身份驗證的外部Web服務客戶端和Auhtorization通過使用用戶會話的表單登錄瀏覽Web應用程序的用戶。所以通過JQuery的AJAX調用不需要使用基本身份驗證。他們應該已經通過會話授權。 – gruenewa 2012-02-29 17:20:06