将我的项目更新为angular 2 final后,我遇到了使用WebApi2 authoriaztion与IdentityServer3和angular2-jwt一起工作的问题。 在angular2-jwt配置中一切正常之前,headername是空的,而token-getter-method只返回令牌。
更新空的headername后导致javascript错误:
EXCEPTION: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': '' is not a valid HTTP header field name.
答案 0 :(得分:1)
所以首先我必须提供一个headername,在我的根模块angular2-jwt配置看起来像这样:
provideAuth({
headerName: 'BearerToken',
headerPrefix: '',
tokenName: '',
tokenGetter: () => {
return JSON.parse(localStorage.getItem('bearerToken'));
},
globalHeaders: [{'Content-Type': 'application/json'}],
noJwtError: true,
noTokenScheme: true
})
仍然无法正常工作。经过一些研究后,我发现标题名称应为“授权”,而tokenName应为“Bearer”。好吧,让我们尝试这样:
provideAuth({
headerName: 'Authorization',
headerPrefix: '',
tokenName: 'Bearer',
tokenGetter: () => {
return JSON.parse(localStorage.getItem('bearerToken'));
},
globalHeaders: [{'Content-Type': 'application/json'}],
noJwtError: true,
noTokenScheme: true
})
还没有达到我的带有授权标签的ControllerMethod。好的,最后一次尝试,也许当我手动添加'Bearer'时它可以工作:
provideAuth({
headerName: 'Authorization',
headerPrefix: '',
tokenName: 'Bearer',
tokenGetter: () => {
var token: string = JSON.parse(localStorage.getItem('bearerToken'));
return 'Bearer ' + token;
},
globalHeaders: [{'Content-Type': 'application/json'}],
noJwtError: true,
noTokenScheme: true
})
和... bombe惊讶......它起作用;)再玩一点我发现tokenName可以是空的或者可以包含其他任何内容。