2016-10-28 74 views
0

我正在編寫一個Angular2客戶端Web應用程序客戶端作爲提供對某些資源的訪問的REST服務的前端。angular2用於Web客戶端的登錄頁面到後端REST服務

的REST服務是保護基本HTTP認證,並允許一些終端(例如GET /freeresource)的未經驗證的訪問,而需要其他端點用戶/密碼認證(比如GET /protectedresource,或POST /freeresource等)。

對於我的Angular2客戶端,我想實現一個登錄頁面,允許用REST服務接受的相同「:」訪問Web應用程序。爲此,我遵循本教程:https://medium.com/@blacksonic86/angular-2-authentication-revisited-611bf7373bf9#.myifbz656

問題是,上面的教程假設後端REST服務有一個明確的/login端點返回您發佈您的憑據的身份驗證令牌,而我的REST服務沒有這樣的端點,但僅當傳遞缺失或需要端點的憑證錯誤時才返回授權錯誤。對於這種情況,我找不到任何其他文章或教程。

在這種情況下,正確的處理方式是什麼?我可以通過從應用登錄頁面讀取具有用戶名和密碼的受保護資源並試圖訪問受保護資源GET /protectedresource來模擬/login端點,如果此通話返回unauthorized錯誤,則認爲是登錄失敗,但顯然這是不是一個令人滿意的解決方案(例如,今天的受保護資源可能會在明天自由訪問),那麼在這種情況下實現Web應用程序登錄的「乾淨」方式是什麼?

回答

0

您不需要模擬/ login端點。您只需要知道訪問哪個資源需要驗證的客戶端。您可以在教程中實現相同的「CanActivate」方法,並編寫服務調用以在進行REST調用時傳遞憑證(如果用戶已通過身份驗證,則使用本地存儲)。如果您的REST端點每次都要求驗證,請在登錄頁面將其從用戶獲取,並將它們存儲在本地存儲中,然後將它們傳遞到需要驗證的端點。

+0

這個解決方案的唯一問題是,我希望我可以在實際需要請求關於任何特定資源的信息之前,在登錄頁面(登錄成功/不成功)給用戶一個即時反饋(在以下屏幕中完成UI)。這就是爲什麼我建議在我的回答中向一些受保護資源發出一些「過早」的GET請求(即在我的UI實際需要這個之前),以檢查提供的用戶名/密碼是否有效。如果不能更改後端REST服務,可能沒有真正的解決方案。無論如何,謝謝。 – chrx