我在我的应用程序中使用基于令牌的身份验证。我的后端使用RESTful服务(春季)。该后端代码是很好的生成与时间表需要的访问令牌和刷新令牌的发展,所以我overidden的HTTP类如下:如何使用角2中的自定义http刷新访问令牌?
export class customHttp extends Http {
headers: Headers = new Headers({ 'Something': 'Something' });
options1: RequestOptions = new RequestOptions({ headers: this.headers });
private refreshTokenUrl = AppSettings.REFRESH_TOKEN_URL;
constructor(backend: ConnectionBackend,
defaultOptions: RequestOptions,private refresh:OauthTokenService) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
console.log("custom http ");
return super.request(url, options)
.catch((err) => {
if (err.status === 401) {
console.log(" custome http 401 ");
// refresh the token
this.refresh.refresh().subscribe((tokenObj)=>{
console.log("tokenobj ");
})
} else {
console.log("err " + err);
}
}); } }
我被陷在refresh()方法刷新令牌,因为我得到循环依赖性错误,所以我尝试在另一个模块中使用刷新服务,但没有运气。我正在使用与此Handling refresh tokens using rxjs中提到的相同的方法任何帮助都会很棒!
但401并不一定意味着无效标记,该标记是有效的,但不是针对该请求,这意味着401将继续激活,并且您将进入循环以重新创建刷新标记...我对么? – Ayyash
或者,也许403是我的意思?所以令人困惑... – Ayyash
我想这是身份验证和授权在这里混淆。 401 UNAUTHORIZED - 请求尚未应用,因为它缺少目标资源的有效认证凭证。 403 FORBIDDEN - 服务器了解请求但拒绝授权。所以如果你从服务器获得401 - 你的凭证是陈旧的。如果您收到了403服务器的身份验证,但由于缺乏权限而无法授权您访问。因此,403更关于您在系统中的权限而不是关于您的令牌。在拥有权限之前,您永远无法使用令牌访问权限。 – Dragonfly