1

私はJWTについてたくさん読んでいましたが、私が書いたコードについてはよくわかりません。
最初に「前」フィルターがあり、次のようにロックします。

before("/protected/*", (request, response) -> {
        try {
             parseJWT(request.headers("X-API-TOKEN"));
        } catch (Exception e) {
            halt(401, "You are not welcome here");
            //don't trust the JWT!
        }
    });

そして、ユーザーを認証し、応答に X-API-TOKEN を設定する post メソッドがあります (テストのためだけに簡単に変更できますが、通常はデータベースにユーザー データがあります)。

  post("/login", (req, res) -> {
        Gson gson = new Gson();
        User user = gson.fromJson(req.body(), User.class);
        if ((!user.getUsername().equals("foo") ||
                !user.getPassword().equals("bar"))) {
            halt(401, "You are not welcome here");
        }
        String jwt =
                createJWT(UUID.randomUUID().toString(), user.getUsername(), user.getUsername(),
                        15000); // just 15 secounds for test
        res.header("X-API-TOKEN", jwt);
        return res;
    });

createJWT および parseJWT メソッドは、このチュートリアルから取得されています: Java で JWT を作成および検証する方法

ログインページ:

    form ng-submit="submit()">
      input ng-model="user.username" type="text" name="user" placeholder="Username" />
      input ng-model="user.password" type="password" name="pass" placeholder="Password" />
      input type="submit" value="Login" />
    /form>

および認証用のコントローラー:

    myModule.controller('UserCtrl', function (`$`scope, `$`http, `$`window) {
    `$`scope.submit = function () {
    `$`http
       .post('/login', `$`scope.user)
       .success(function (data, status, headers, config) {
     `$`window.sessionStorage.token = headers('X-API-TOKEN');
     `$`scope.message = 'Welcome protected';
    })
    .error(function (data, status, headers, config) {
    // Erase the token if the user fails to log in
    delete `$`window.sessionStorage.token;
    // Handle login errors here
    `$`scope.message = 'Error: Invalid user or password';
    `$`window.location.href = '#/auth';
    });
    };
    });

保護されたサイトにアクセスするたびに、ヘッダー X-API-TOKEN を各 http 呼び出しに追加する必要があります。

      var config = {headers:  { 
             'X-API-TOKEN': `$`window.sessionStorage.token
           }
    };
      `$`http.get("/protected/elo", config)
      .success(function(response) {`$`scope.message = response;})
        .error(function (data, status, headers, config) {
                // Erase the token if the user fails to log in
                delete `$`window.sessionStorage.token;
                // Handle login errors here
                `$`scope.message = 'Error: Invalid user or password';
               `$`window.location.href = '#/auth';
              });;

2 つの質問があります
。1. すべてのリクエストで X-API-TOKEN を自動的に追加する方法を教えてください。
2. SSL を有効にすると、コードは十分に安全になりますか?

4

1 に答える 1

1
  1. $http.defaults.headers.common を使用して、すべてのリクエストにヘッダーを追加できます。angular ドキュメントを参照してください。これは、ログインに成功した後に構成する必要があります。

    トークンを Cookie に保存して、「remember me」機能を実装することもできます。

  2. SSL を有効にすると、ほとんどの用途で十分安全です。IPアドレスのチェックなど、サーバーにさらにセキュリティチェックを追加できます(一部のユーザーは動的IP番号を持っていることに注意してください)

AngularでJWTを使用するegghead.ioコースもお勧めします

于 2016-02-09T11:07:01.330 に答える