2017-01-07 15 views
0

コンテキスト:localstorageを使用してjwtを通じてnode.jsアプリケーションを認証します。JWT署名とエンコーディング:やりすぎや良いアイデア

これについて多くの意見を読んだ後、私はかなり混乱しています。 私はこのコードを持つユーザでログインする実装を持っている:

var payload = jwts.encode({id: user.id}, jwtOptions.secretOrKey); 
var token = jwt.sign(payload, jwtOptions.secretOrKey); 

これは少し単純化しています。しかし、エンコーディングが本当に必要かどうかは疑問です。私はこれの代わりに行くべきですか?

var payload = {id: user.id}; 
var token = jwt.sign(payload, jwtOptions.secretOrKey); 

私は、ペイロードにおける過度に敏感なデータを持っていないが、私は見て(ユーザーのコンピュータが危険にさらされているとのlocalStorageは、彼らが「管理者」ユーザです表示されるでしょう)悪用される可能性の請求を追加していく予定です。これはeコマースサイトではありませんが、上記のシナリオでは安全なものにしたいと考えています。

トークンを大きくすると(約30%大きくなります)、これがパフォーマンスに影響します。人々が現在持っている帯域幅を考えると余分な少数のキャラクターは本当に重要ですか

答えて

0

あなたの提案されたオプションはRFC 7519 Json Web Tokenによって許可されていません。 JWTは、JWSコンパクトシリアル化を使用し、各部分は、BASE64 URLが

A JWT

ピリオド(「」)文字で区切られたURLセーフ部品の配列として表現される符号化しなければなりません。 各パートにはbase64urlでエンコードされた の値が含まれています。シリアライズすることなく、JWTを送信JWEコンパクトシリアル化を使用して JWT内の部品の数がJWSコンパクト シリアル化またはJWEを使用したJWSの 表現に依存している

あなたはエンコーディングに対処する必要があるということです。コンパクトとフラット化されたシリアライゼーションの違いを見たい場合はJWS RFCを見てくださいhttps://tools.ietf.org/html/rfc7515#page-19

+0

スニペットのおかげで。いくつかの点:トークンはまだbase64でエンコードされています。エンコードされた 'ペイロード'変数をエンコードしたbase64です。また、仕様書には、jwtがbase64でエンコードされていることが記載されていますが、ライブラリではさまざまなタイプのアルゴリズムが使用できます:optionsセクションの値 – user2331566

+0

はい、JWTをビルドする場合、JSONペイロードは** base64 url​​ encoded **標準アルゴリズム、base64エンコーディングを適用し、後に2つの文字を置き換えます – pedrofb

関連する問題