2013-02-17 128 views
4

我試圖找出什麼是保護我的Spring MVC控制器(它只使用json)的最佳方法。 我跟着很多問題(例如RESTful Authentication via Spring)。 雖然我的問題似乎是一個相當常見的用例,但我沒有找到具體的答案。通過Spring MVC RESTful移動客戶端身份驗證

要求:

  1. 的所有通信都使用JSON移動客戶端(的Android/iPhone)製成。
  2. 用戶可以使用facebook(使用facebook sdk進行客戶端身份驗證)登錄,這意味着沒有密碼可發送到服務器。
  3. 不需要BASIC認證,因爲沒有密碼,我寧願讓客戶輕易登錄。
  4. 重要沒有註冊屏幕,因爲我想緩解我的用戶,當用戶登錄(臉書/電子郵件)服務器創建在飛行DB內的用戶,在Facebook的情況下我不是向用戶詢問任何事情,因爲他已經在本地使用Facebook sdk進行了身份驗證,至於電子郵件,服務器要求用戶輸入他的密碼,因爲他可能會使用別人的其他電子郵件。

我特別努力實現第4步,可能會使用Spring Security,因爲我的服務器大量使用Spring。

回答

2

我們在我們的一個webapps上執行類似於#4的操作。基本上,過程是:

1)創建(或覆蓋FacebookApiAdapter)setConnectionVales方法。

2)從Facebook配置文件中取出電子郵件(或任何用於內部用戶名的內容)。

3)創建一個新的身份驗證令牌:

UsernamePasswordAuthenticationToken newAuth = new UsernamePasswordAuthenticationToken(user, "yourrealm",authorities); 

其中用戶匹配您的內部用戶類型,當局是一個集(提示:只需添加新SimpleGrantedAuthority字符串)

4)設置在SpringSecurityContext新的身份驗證令牌:

SecurityContextHolder.getContext().setAuthentication(newAuth); 

然後你就可以使用正常的春季安全設置按角色來保護的東西,只要新的令牌有作用在他們的GrantedAuthorities中。