2017-01-18 21 views
1

私はバックボーンを使ってCordovaアプリケーションを作っています。目標はJSON Webトークン(JWT)でソケット認証を達成することでした。webcrypto-shimでもcryptotleは存在しません

私のJWTに署名するには、webcrypto-jwtを使用し、ブラウザでアプリを使用するとうまくいきました。

私は携帯電話とBBAAMMでアプリを試しました... webcrypto-jwtは、ブラウザのwindow.crypto.subtleモジュールを使用しています。

var cryptoSubtle = (window.crypto && crypto.subtle) || 
(window.crypto && crypto.webkitSubtle) || 
    (window.msCrypto && window.msCrypto.Subtle); 

しかし、Androidのウェブビューで微妙なことはありません。

だから私はwebcrypto-shimを使ってcryptotleを追加しました。しかし、それは動作しません。

これは私のコードヤのwindowオブジェクトのスクリーンショットです。それは暗号鍵を持っていますが、そこに微妙なものはありません!

screen of window object

だから、私はJWTに署名することはできません。

+0

は(YとハイテクXを組み合わせることなど_How _?)タイトルにタグを入れないでください –

答えて

1

多くの研究とテストの結果、cordovaで動作する純粋なjsライブラリが見つかりました。

jsrsasign

私は私のJWTをauthentificateするためにそれを使用。 cryptotletleモジュールは使用しません。

 // Header 
     var oHeader = { alg: 'HS256', typ: 'JWT' }; 
     // Payload 
     var oPayload = {}; 
     var tNow = KJUR.jws.IntDate.get('now'); 
     var tEnd = KJUR.jws.IntDate.get('now + 1day'); 
     oPayload.iss = "http://foobar.com"; 
     oPayload.sub = "mailto:[email protected]"; 
     oPayload.iat = tNow; 
     oPayload.exp = tEnd; 
     oPayload.jti = "id123"; 
     oPayload.aud = "http://someUrl"; 
     oPayload.email = "userEmail"; 
     oPayload.pwd = "userPassword"; 
     oPayload.deviceId = "deviceId"; 

     // Sign JWT. 
     var sHeader = JSON.stringify(oHeader); 
     var sPayload = JSON.stringify(oPayload); 
     //secret -> your secret that the server gave you. 
     var sJWT = KJUR.jws.JWS.sign("HS256", sHeader, sPayload, secret); 
     console.log(sJWT); 

これだけです。それは私の問題を解決しました。
私は未定義のcryptotleエラーがまだ存在することを知っています。私はその問題に対する解決策を見出しませんでした。
私はcordovaを担当する開発者が、他のすべてのブラウザで見つけることのできるクライオモジュールをサポートするよう努力することを約束しますが、唯一の解決策はサードパーティのライブラリを使用することです。

2

WebCryptographyApiはAndroidのWebViewのではサポートされていない、とwebcrypto-シムは、このコンポーネント

を対象とされていないライブラリは、APIの実装webcrypto接頭辞とバギーたこれらのブラウザを修正するために目標とされています

のInternet Explorer 11、モバイルインターネットエクスプローラ11、 Safari 8以上、iOS Safari 8以上。

期待どおりの動作を得ています。私はwindow.cryptoは、Cordovaを示していると思う古い実装です。

キーストレージが必要な場合は、Androidのネイティブキーストア(またはそれを構築する場合はiOS)を使用することをおすすめします。暗号機能をお探しの場合は、純粋なjavascriptライブラリをご利用ください。

+0

ご回答有難うございます。純粋なJSでjwtの署名を検索します。 – Doctor

関連する問題