Angular 从 JWT 获取 Spring 角色

Posted

技术标签:

【中文标题】Angular 从 JWT 获取 Spring 角色【英文标题】:Angular Get Spring Roles from JWT 【发布时间】:2017-10-18 04:32:40 【问题描述】:

我在 REST 后端(使用 Spring 构建)中有两个角色:

ROLE_USER、ROLE_ADMIN

当我登录时,REST API 返回一个有效的令牌。然后我将它设置在本地存储中,如下所示:

localStorage.setItem('currentUser', JSON.stringify(username: username, token: token));

当我需要它时,我会得到它:

localStorage.getItem('currentUser');

到目前为止一切顺利。当我获得我的令牌时,我如何获得有效负载和其中的声明?

如果你是管理员,我想显示管理面板。

【问题讨论】:

【参考方案1】:

其他答案涵盖了您问题的春季部分,因此我将把答案集中在角度部分。

您可以使用指令来显示/隐藏管理面板,如下所示:

<admin-component *ngIf="user.isAdmin"></admin-component>

【讨论】:

【参考方案2】:

根据令牌识别用户角色非常困难,最好添加一个新标志,如 IS_ROLE_USER、IS_ROLE_ADMIN 并根据该标志检查当前用户角色。或者使用spring boot security。会不会对你有帮助。

【讨论】:

我正在使用 Spring Security。但是,我不知道如何隐藏包含管理选项的 div。【参考方案3】:
jwtHelper.decodeToken($scope.jwt)

见https://github.com/auth0/angular-jwt和https://github.com/auth0/angular2-jwt

一个例子https://github.com/auth0-blog/angularjs-jwt-authentication-tutorial/blob/8841ad5d7cb034506d2e3e6840db6202e6969b7a/frontend/home/home.js#L16

【讨论】:

10x,我对图书馆有两个担忧:1)this.jwtHelper.decodeToken(token) 如果我不提供秘密,这将如何解码我的令牌? 2)如果我以某种方式提供秘密不是漏洞吗? ***.com/questions/31953325/… 看看这个 谢谢,这正是我需要的! :)

以上是关于Angular 从 JWT 获取 Spring 角色的主要内容,如果未能解决你的问题,请参考以下文章

@auth0/angular-jwt : 从解码的令牌中获取声明

如何在 Angular 中从服务器获取带有 jwt 令牌的响应标头

从 Symfony3 中经过身份验证的用户 (HWIOAuth) 获取 Angular2 中的 JWT 令牌

创建隐式JWT时的Spring Boot OAuth2?

Spring Security Jwt Token在请求表单角度时允许所有Options方法

Angular2 Spring Boot JWT 缺少响应标头