2017-06-12 56 views
1

在JavaScript中我有一個方法,通過http post請求成功地向我的服務器進行身份驗證。如何從Javascript(Angular2/4)中的授權標題中檢索無記名標記?

從我的服務器的響應數據中的授權頭髮送JWT像這樣:

Authorization: Bearer mytoken12345abc 

我能成功地檢索授權頭從我的服務器等,以便例如響應數據:

let authheader = response.headers.get('Authorization'); 

但我如何解析這個? 「承載者」是關鍵嗎?所以像這樣:

let token = authheader.Bearer 

這顯然是不正確的......任何人都可以提供任何幫助?

換句話說,下面是最好的辦法嗎?

let token = response.headers.get('Authorization'); 
let parsedToken = token.slice(7); 
+0

你工作在角? –

+0

是的角度2/4 –

+0

後端nodejs? –

回答

2

按照jwt.io實況,

每當用戶想要訪問受保護的路由或資源時,用戶代理應該使用承載方案發送JWT,通常在授權標頭中。

因此,在授權標頭中使用JWT應該由客戶端使用,而不是服務器用於初始響應。

正確的方法是將令牌作爲響應主體的一部分。我們使用一個

{ jwt: TOKEN } 

類型的計劃。 然後您可以通過您的response.json()輕鬆訪問它。

您可以直接使用response.headers.get(...)來訪問標頭值,但您必須使用splitsubstr或正則表達式匹配才能獲得實際的標記。

0

當你從服務器獲取令牌設置它在瀏覽器會話存儲/地方像下面

sessionStorage.setItem('token', authheader); 

每當你打電話服務器組授權令牌的服務,頭就好像下面

一種安全的方式
import { Http, Headers, RequestOptions, Response } from '@angular/http'; 
    getUser(){ 

      let headers = new Headers({ 'Authorization': 'Bearer ' + sessionStorage.getItem('token') }); 
      let options = new RequestOptions({ headers: headers }); 

      // get users from api 
      return this.http.get('http://localhost:9000/api/user', options) 
       .map((response: Response) => response.json()); 
     } 
+0

感謝您的這一點,我明白這一點,但是...在我可以將令牌設置爲sessionStorage之前,我如何從「授權」頭中檢索它?我的服務器以標題的形式發送令牌,就像你告訴我如何發送給服務器一樣...... –

+0

你的意思是?你想從angular2的API頭獲得令牌嗎? –

+0

是的,我的服務器在「授權」標頭中成功登錄後發送令牌:授權:承載者mytoken123abc ... –