Angular 2和Spring Kerberos

时间:2017-02-08 11:29:53

标签: spring angular spring-security kerberos

是否可以在Angular 2应用程序中使用Kerberos?我们使用Spring来托管我们的REST服务,并使用Kerberos保护Angular 2资源。我们想要添加角色并定义Angular2应用程序中可用于某些角色的功能。由于大多数人似乎已经开始使用JWT或OAuth,因此似乎没有关于如何执行此操作的信息。

是否可以使用Kerberos进行初始身份验证,然后生成一个发送回浏览器的JWT?

目前我正在考虑设置一个REST端点/用户,它返回有关当前登录用户的所有信息,包括他/她的权限。在Angular中,我可以读取这些权限并相应地操纵UI和路由。来自服务器的数据已经受到Kerberos和Spring的保护。因此,如果用户仍然可以更改其本地Angular以访问某些受保护的路由,则他们将看不到任何数据。

3 个答案:

答案 0 :(得分:0)

你说的话绝对正确。您可能希望通过后端处理身份验证,无论是Kerberos,OAuth还是其他任何方式。成功登录后,后端将返回元数据响应,允许UI正确配置自身。由于后端是受保护资源所在的位置,因此UI实际上不需要“受保护”,而是更加“动态配置”以适合给定用户。

您必须决定如何执行此操作,以及您希望编写大部分逻辑的位置。例如,后端可以返回像角色或体验标识符那样简单的东西(例如Admin,User,Guest)。从那里,UI将知道应该/可以执行哪些活动,哪些资源可用等.UI将知道例如Guest不能添加新用户,但是,因为Guest先生可能会好奇,最重要的事情是,后端确实不允许他修改用户帐户。

答案 1 :(得分:0)

这将是JWT令牌的完美用例。在服务器端进行身份验证后端服务可以创建具有特定用户角色的JWT令牌,并将其返回给Angular2应用程序。 Angular app可以根据用户的角色配置UI。在每个连续的服务器调用上,角度应用程序都可以发送回此令牌,以便此令牌用于查找用户的角色。 Spring安全性允许在Authentication之前添加自定义过滤器,可用于验证令牌。

@Configuration
public class WebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

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

在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
    }
}

答案 2 :(得分:0)

您在后端方面选择auth技术不应该影响您在前端方面的决策,无论是OAuth,JWT,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)。