2017-02-08 70 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)。