【发布时间】:2016-09-25 21:41:38
【问题描述】:
我有一个带有 JWT 身份验证 (Auth0) 的 Angular 2 应用程序,在用户登录后将配置文件和令牌 ID 存储在 localStorage 中,配置文件包含一个“角色”属性来检查用户是否可以访问特定页面。 一切都像一个魅力,但如果用户将 localStorage 中的角色属性更改为“admin”,例如并重新加载应用程序,他可以访问他未授权的页面。我该如何处理?
auth.service.ts:
declare var Auth0Lock: any;
@Injectable()
export Class AuthService {
lock = new Auth0Lock(ID, domain);
user: Object;
constructor() {
this.user = JSON.parse(localStorage.getItem('profile'));
}
public login() {
// Auth0 method
this.lock.show({}, (err: string, profile: Object, token: string) => {
if (err) { console.log(err); return; }
localStorage.setItem('profile', JSON.stringify(profile));
localStorage.setItem('id_token', token);
});
}
public logout() {
localStorage.removeItem('profile');
localStorage.removeItem('id_token');
}
public loggedIn() {
return tokenNotExpired();
}
public isAdmin() {
if (this.user['role'] == 'admin') {
return true;
} else {
return false;
}
}
}
app.component.ts:
// imports, etc
export Class AppComponent {
constructor(private auth: AuthService) {}
}
app.component.html:
<nav>
<ul>
<li><a [routerLink]="['Customers']" *ngIf="auth.loggedIn()">Customers</a></li>
<li><a [routerLink]="['Admin']" *ngIf="auth.loggedIn() && auth.isAdmin()">Admin</a></li>
</ul>
</nav>
任何想法都将不胜感激
【问题讨论】:
-
您还可以在您的 api 中添加过滤器,为每个未经授权的请求响应 401/403 状态。然后在客户端,监听
401和403http 错误以提高安全性。查看我关于如何做到这一点的文章 - adonespitogo.com/articles/angular-2-extending-http-provider
标签: angularjs angular jwt auth0