JWT の紹介JWTとは正式名称は { 「名前」:「張三」、 「役割」: 「管理者」、 「有効期限」: 「2018年7月1日 00:00」 } JWT が必要な理由は何ですか?まず、 1. ユーザーはユーザー名とパスワードをサーバーに送信します。 2. サーバー検証に合格すると、ユーザーロール、ログイン時間などの関連データが現在の 3. サーバーはユーザーに 4. ユーザーによる後続の各リクエストでは、 5. サーバーは しかし、ここで大きな問題があります。サーバー クラスターの場合、セッション データの共有が必要になり、各サーバーがセッションを読み取ることができます。この実装のコストは比較的高くなります。 JWT データ構造
{ "アルゴリズム": "HS256", "タイプ": "JWT" }
もちろん、プライベートフィールドをカスタマイズすることもできます。 ただし、JWT はデフォルトでは暗号化されておらず、誰でも読み取ることができるため、この部分には秘密情報を入れないでください。 HMACSHA256 base64UrlEncode(ヘッダー) + "." + base64UrlEncode(ペイロード)、 秘密) 署名を計算した後、 JWTのセキュリティ
Node の簡単なデモ - Koa JWT の実装理論的な知識について説明した後、 まず、ユーザーがログインすると、サーバーはユーザー情報に基づいて ここでは jsonwebtoken は、 Koa-jwtミドルウェアは、主に koaプロジェクトを素早く構築する現時点では、 インストール npm をインストール -g koa-generator プロジェクトを開始する トークンを生成するデモンストレーションの便宜上、実際にはデータベースに保存されるユーザー情報を格納するための変数 const crypto = require("crypto"), jwt = require("jsonwebtoken"); // TODO: データベースを使用する // これはデータベースに保存する必要がありますが、これはデモンストレーション用です let userList = []; クラスUserController { // ユーザーログイン static async login(ctx) { const データ = ctx.request.body; if (!data.name || !data.password) { ctx.body = {を返します コード: "000002", メッセージ: 「無効なパラメータ」 } } const result = userList.find(item => item.name === data.name && item.password === crypto.createHash('md5').update(data.password).digest('hex')) if (結果) { const トークン = jwt.sign( { 名前: 結果.名前 }, "Gopal_token", // シークレット { expiresIn: 60 * 60 } // 60 * 60 秒 ); ctx.body = {を返します コード: "0", メッセージ: 「ログイン成功」、 データ: { トークン } }; } それ以外 { ctx.body = {を返します コード: "000002", メッセージ: 「ユーザー名またはパスワードが正しくありません」 }; } } } モジュールをエクスポートします。 クライアントがトークンを取得するフロントエンドがログインして ログイン() { これ.$axios .post("/api/ログイン", { ...このルールフォーム、 }) .then(res => { (res.code === "0"の場合){ this.$message.success('ログインに成功しました'); localStorage.setItem("トークン", res.data.token); this.$router.push("/"); } それ以外 { this.$message(res.message); } }); } // axios リクエストインターセプターはリクエストデータを処理します axios.interceptors.request.use(config => { const トークン = localStorage.getItem('トークン'); config.headers.common['Authorization'] = 'Bearer ' + token; // ここで Authorization に注意してください 設定を返します。 }) トークンを確認する検証に // エラー処理 app.use((ctx, next) => { 戻り値 next().catch((err) => { (エラーステータス === 401)の場合{ ctx.ステータス = 401; ctx.body = '保護されたリソース。アクセスするには Authorization ヘッダーを使用します\n'; }それ以外{ エラーをスローします。 } }) }) // 注: ルートの前に配置します app.use(koajwt({ シークレット: 'Gopal_token' }).unless({ // ホワイトリストのパスを設定する: [/\/api\/register/, /\/api\/login/] })) // ルート app.use(index.routes(), index.allowedMethods()) app.use(users.routes()、users.allowedMethods()) を使用します 以下の点に注意することが重要です。
デモログインが必要なインターフェースに直接アクセスすると、 最初に登録してからログインしてください。そうしないと、ユーザー名またはパスワードが間違っているというメッセージが表示されます。 ログイン後、 要約するこの記事では、 記事が長くなったので、比較的簡単な この記事の 参照するJSON Web Token 入門チュートリアル Node.js アプリケーション: Koa2 は認証に JWT を使用します Node で koa2 を使用して簡単な JWT 認証方式を実装する方法についての記事はこれで終わりです。Node koa2 JWT 認証に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Trash-Cli: Linux のコマンドラインごみ箱ツール
>>: Windows 10 での MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル
Linuxは特定のプログラムを見つけますwhereis コマンドは主にプログラム ファイルを検索し、...
<br />表の境界線の CSS 構文具体的な内容には、上境界線の幅、右境界線の幅、下境...
問題: MySQL がデータ ファイルを保存するパーティションの容量が小さく、現在いっぱいになってい...
オーバーフロー非表示指定された高さを超えるテキストや画像情報を非表示にすることを意味します。 <...
最近は学ぶべき知識が多すぎて、どれを先に学べばいいのかわかりません。このブログはもともとxamari...
目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...
1. ダウンロード公式サイトからmysql-5.7.19-linux-glibc2.12-x86_6...
1. 監視アーキテクチャ図 2. 実装のアイデアJenkins に Metrics プラグインをイン...
目次1 ストレステストの指標1.1 秒あたり1.2 クォータ1.3 平均処理時間(RT) 1.4 同...
目次1. パノラマII. 背景1. 反応: プロフェッショナル2. ビュー: 凡例3. 技術的な思考...
<br />原文: http://research.microsoft.com/~hel...
イギリスBFC: ブロック書式設定コンテキストBFCレイアウトルール内箱は縦方向に次々に配置されます...
アイデア: 最初にランダムに並べ替えてからグループ化します。 1. テーブルを作成します。 テーブル...
オブジェクトがメソッドを呼び出す順序:インスタンス内にメソッドが存在しない場合は、インスタンス オブ...
序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...