来自WebApi Middleware的IdentityServer BearerAuthentication使用angular2-jwt

时间:2017-02-21 09:11:46

标签: angular asp.net-web-api identityserver3 angular2-jwt

将我的项目更新为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.

1 个答案:

答案 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可以是空的或者可以包含其他任何内容。