是否可以在Angular 2应用程序中使用Kerberos?我们使用的是Spring,它托管了我们的REST服务,还通过Kerberos保护了Angular 2资源。我们希望添加角色,并定义Angular2应用程序中的哪些功能可用于某些角色。关于如何做到这一点的信息似乎很少,因为大多数人似乎都去使用JWT或OAuth。
是否可以使用Kerberos进行初始身份验证,然后生成JWT并将其发送回浏览器?
目前,我正在考虑设置一个REST端点/user,它返回有关当前登录用户的所有信息,包括他/她的权限。在Angular中,我可以读取这些权限,并相应地操作UI和路由。来自服务器的数据已经受到Kerberos和Spring的保护。因此,如果用户仍然可以更改他们的本地角度来访问一些受保护的路由,他们将看不到任何数据。
发布于 2017-03-24 10:55:10
你所说的完全正确。您可能希望通过后端处理身份验证,后端可以是Kerberos、OAuth或其他任何东西。成功登录后,后端将返回一个元数据响应,该响应允许UI对自身进行适当的配置。由于后端是受保护资源所在的位置,因此UI实际上不需要“保护”,而是更需要“动态配置”以适合给定的用户。
你必须决定你想如何做,以及你想要在哪里写你的大部分逻辑。例如,后端可以返回像角色或经验标识符这样简单的内容(例如,管理员、用户、来宾)。从那里,UI将知道应该/可以执行哪些活动、哪些资源可用等。例如,UI将知道Guest不能添加新用户,但是,因为Guest先生可能会感到好奇,所以最重要的事情是,后端确实不允许他修改用户帐户。
发布于 2017-03-29 21:39:49
这将是JWT令牌的完美用例。一旦您在服务器端通过身份验证,后端服务就可以创建一个具有特定用户角色的JWT令牌,并将其返回给Angular2应用程序。Angular应用程序可以根据用户的角色配置UI。在每次连续的服务器调用中,angular应用程序都可以发回这个令牌,这样这个令牌就可以用来查找用户的角色。Spring安全允许在身份验证之前添加自定义过滤器,该过滤器可用于验证令牌。
@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
}
}发布于 2017-03-29 23:41:56
您在后端选择的身份验证技术应该不会对您在前端的决策产生太大影响,无论是OAuth、JWT、Kerberos还是定制的东西。
你需要在后端使用Kerberos对用户进行身份验证,将票证(auth token)保存在前端的某个地方(例如,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)。
https://stackoverflow.com/questions/42111908
复制相似问题