2017-02-08 71 views
2

是否可以在Angular 2應用程序中使用Kerberos?我們使用Spring來託管我們的REST服務,並使用Kerberos保護Angular 2資源。我們希望添加角色並定義Angular2應用程序中的某些功能可用於某些角色。似乎很少有關於如何做到這一點的信息,因爲大多數人似乎已經使用JWT或OAuth。Angular 2和Spring Kerberos

是否可以使用Kerberos進行初始身份驗證,然後生成JWT並將其發送回瀏覽器?

目前我正在考慮設置REST端點/用戶,它將返回有關當前登錄用戶的所有信息,包括他/她的權限。在Angular中,我可以讀取這些權限並相應地操作UI和路由。來自服務器的數據已經被Kerberos和Spring保護。所以如果用戶仍然可以改變他們的本地Angular來訪問一些受保護的路由,他們就不會看到任何數據。

回答

0

你說的絕對正確。你會希望通過後端來處理認證,無論是Kerberos,OAuth還是其他。登錄成功後,後端將返回一個元數據響應,允許用戶界面進行適當的配置。由於後端是受保護資源的位置,因此用戶界面並非真的需要「保護」,而是「動態配置」以適合給定的用戶。

你必須決定你想怎麼做,以及你想寫什麼邏輯。例如,後端可以返回像角色或體驗標識符那樣簡單的內容(例如Admin,User,Guest)。從那裏,用戶界面將知道應該/可以執行哪些活動,哪些資源可用等。例如,用戶界面將知道訪客不能添加新用戶,但是因爲訪客先生可能會好奇,所以最重要的是事情是,後端確實不允許他修改用戶帳戶。

0

這將是JWT令牌的完美用例。一旦您在服務器端進行身份驗證,後端服務可以創建具有特定用戶角色的JWT令牌並將其返回給Angular2應用。 Angular應用程序可以根據用戶的角色配置UI。在每個連續的服務器調用中,角度應用程序都可以發回此令牌,以便使用此令牌來查找用戶的角色。 Spring安全允許在驗證之前添加自定義過濾器,以便驗證令牌。

@Configuration 
public class WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.addFilterAfter(new TokenFilter(), BasicAuthenticationFilter.class); 
    } 
} 

Inside TokenFilter可以解析JWT令牌以查找用戶角色並允許訪問特定的受保護資源。如果有人嘗試修改令牌或請求禁用保護資源,則JWT令牌驗證將失敗。在後端側

public class TokenFilter extends GenericFilterBean { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException { 
     // Validate Token her for the requested url 
     if(validateToken(request.getHeader("auth")){ 
      chain.doFilter(request, response); 
     }else{ 
      // return 403 response 
    } 
} 
0

您選擇身份驗證技術,不應該影響你對前端側決定了,無論是OAuth的,智威湯遜,Kerberos或一些定製。

您需要使用Kerberos對後端的用戶進行身份驗證,在前端(例如,cookie或本地存儲)中的某個位置保留票證(身份驗證令牌),並在使用該票證驗證未來請求時進行身份驗證。這將需要一些自定義代碼和Kerberos協議的基本知識(http://www.roguelynn.com/words/explain-like-im-5-kerberos/Kerberos authentication in Node.js https.get or https.request),因爲我在Angular2中看不到任何現有的Kerberos協議實現(不應該太難)。

您可以通過Kerberos使用JWT,但這需要端點和前端之間的附加層。恕我直言,只用一種您已經使用的技術(Kerberos)將會更容易。

然後,您可以在Angular2中實施自定義警衛以防止未經授權訪問路由(請參閱https://blog.thoughtram.io/angular/2016/07/18/guards-in-angular-2.html)。