2016-12-07 23 views
1

asp.net Web APIアプリケーションでJWT認可を作成する方法についてはthis tutorialに従っています。JavaScriptでasp.net Web-Apiによって作成されたJWTを検証およびデコードする方法

私の場合、認証サーバーはリソースを保持しているサーバーと同じサーバーになります(つまり、すべてasp.net Web APIアプリケーションで実行されます).JWTをエンコードする際に使用される「秘密」を共有することはできませんルート認証と認可に来るときの問題。

しかし、UIのさまざまな部分を有効/無効にできるようにJWTを検証してデコードできるようにしたいモバイルアプリケーション(Ionicフレームワークを使用)があります。 JavaScriptでこれを行う必要があります。

私は、アプリケーションがJWTをエンコードするために使用されたこの「秘密」文字列にアクセスしないようにしたいと思います。

私の質問はどのように私の両方が、この「秘密」キーを持ってすることなく検証し、JWTをデコードすることができます

    1. ですか?

    2. 他の投稿を読んで、検証はできませんが、デコードは可能です。この場合、誤ったUIを有効にする可能性がありますが、最終的にWeb API呼び出しが失敗するため、これも検証を行うことができます。これは正しい方法でしょうか

    3. 私たちは秘密鍵と公開鍵を持つ別の方法でJavaScriptを公開鍵にして検証に使用できますか?

    ご協力いただきありがとうございます!

  • +0

    を拒否により、サーバー側に失敗していましオプションやリンクを参照してくださいということだろうサイドJS? – zerkms

    +0

    答えに対するコメントとして、おそらくクライアントの検証は過剰です。主張を得るためにデコードをしてください。 – peterc

    答えて

    1

    非対称暗号化に基づいたRS256などの署名アルゴリズムを使用できます。つまり、トークンに署名するにはプライベートキーにアクセスする必要があります。プライベートキーは安全にサーバー側に格納でき、検証するには公開キーへのアクセスのみが必要です。

    JSON Webトークン(JWT)は、JSONオブジェクトとしてパーティ間で情報を安全に伝送するコンパクトで自立的な方法を定義するオープンスタンダード(RFC 7519)です。この情報はデジタル署名されているため、検証および信頼することができます。 JWTは、秘密(HMACアルゴリズムを使用)、またはRSAを使用する公開鍵/秘密鍵のペアを使用して署名できます。

    (ソース:Learn JSON Web Tokens;強調は私です)

    あなたが述べたように、あなたがユーザーデバイス上で動作するクライアントアプリケーション上で行う決定は、唯一のユーザーエクスペリエンスの観点から行うべきであるとすべての許可決定すべきですサーバー側ではやり直してください。

    最もよく似たのは、ブラウザ上で即時のフィードバックを提供するためにブラウザで実行できるが、攻撃者が簡単にバイパスできるように、サーバ側で同じ検証を行う必要があるクライアントサイドのもの。


    また、あなたが考慮して取る必要があります:あなたは大丈夫なら

    • をトークンは、APIでの使用を意図しているという事実にもかかわらず、クライアントアプリケーションによってトークンのこの解釈が許容されますクライアントアプリケーションとリソースサーバーとの間に非常に密接な関係があります。 あなたの説明から、システムのすべての部分があなたのコントロール下にありますので、これは問題ありません。
    • RSA256を使用すると、前述の共有秘密情報に基づくHS256の使用と比較してパフォーマンスが低下します。これが問題であれば、本当にクライアント側のトークンを検証する必要があるかどうか疑問視することさえできます。あなたがするすべての決定が純粋に美容的なものであれば、なぜ検証に気をつけてください。 前提が偽のトークンを提供しようとしている誰かがのみアクセスするときにクライアントにそれを検証するのはなぜすぐにトークン
    +0

    ありがとうございました。それはすべて意味があります。私はおそらくクライアント側の検証を考えていることを読んで、ちょうどそのように見えるようにデコードすることができます説明[ここ](http://stackoverflow.com/questions/38552003/how-to-decode-jwt-token-in-javascript )これは、すべての要求が実行されるので、より安価な検証サーバー側を使用することができます。 – peterc

    関連する問題