- vừa được xem lúc

Blog#199: 🔐Node.js Expressでの認証と認可

0 0 9

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

199

こんにちは、私はトゥアンと申します。東京からフルスタックWeb開発者です。 将来の有用で面白い記事を見逃さないように、私のブログをフォローしてください。😊

はじめに

この記事では、Node.js Expressアプリケーションにおける認証と認可の基本概念について説明します。認証と認可の違い、それらを実装するさまざまな方法、およびアプリケーションを効果的に保護する方法について解説します。

認証と認可の理解

認証

認証は、ユーザー、デバイス、システムの身元を確認するプロセスです。Webアプリケーションの文脈では、保護されたリソースに有効なユーザーのみがアクセスできるようにする仕組みです。

認可

一方、認可は、認証されたユーザーがアクセスできるアクションやリソースを決定するプロセスです。ユーザーの役割や属性に基づいて、許可と制限が適用されます。

Node.js Expressでの認証の実装

Passport.jsを使用する

Passport.jsは、Node.jsアプリケーションで認証プロセスを簡素化する人気のあるミドルウェアです。OAuth、OpenID Connect、ローカル認証など、複数のストラテジーに対応しています。ExpressアプリケーションにPassport.jsを統合するには、次の手順に従ってください。

  1. Passport.jsと必要なストラテジーをインストールします:
npm install passport passport-local
  1. アプリケーションでPassport.jsを設定します:
const express = require('express');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy; const app = express(); // Passportローカルストラテジーの設定
passport.use(new LocalStrategy( function(username, password, done) { // ユーザー名とパスワードに基づいてユーザーを認証 }
)); // Passportセッションの設定
passport.serializeUser(function(user, done) { done(null, user.id);
}); passport.deserializeUser(function(id, done) { // IDに基づいてユーザーを取得
}); app.use(passport.initialize());
app.use(passport.session());
  1. ログインルートを実装します:
app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login', failureFlash: true
}));

JSON Web Tokens (JWT)を使用する

JSON Web Tokens(JWT) は、Webアプリケーションで認証を実装するもう1つの人気のある方法です。JWTは、ユーザー情報を含む自己完結型のトークンであり、ステートレスでスケーラブルです。JWT認証を実装するには、次の手順に従ってください。

  1. 必要なパッケージをインストールします:
npm install jsonwebtoken express-jwt
  1. JWTトークンを生成して署名します:
const jwt = require('jsonwebtoken'); function generateToken(user) { return jwt.sign(user, process.env.JWT_SECRET, { expiresIn: '1h' });
}
  1. ログインルートを実装します:
const jwt = require('jsonwebtoken');
const expressJwt = require('express-jwt'); app.post('/login', (req, res) => { // ユーザー名とパスワードに基づいてユーザーを認証 // ... const token = generateToken(user); res.json({ token });
}); // JWTを使用してルートを保護する
app.use(expressJwt({ secret: process.env.JWT_SECRET }));

Node.js Expressでの認可の実装

ロールベースのアクセス制御(RBAC)

ロールベースのアクセス制御(RBAC) は、認可を実装する一般的なアプローチです。ユーザーにロールを割り当て、ロールに権限を付与します。ExpressアプリケーションでRBACを実装するには、次の手順に従ってください。

  1. ロールと権限を定義します:
const roles = { admin: { can: ['read', 'write', 'delete'] }, user: { can: ['read'] }
};
  1. 権限をチェックするミドルウェアを実装します:
function can(permission) { return (req, res, next) => { const userRole = req.user.role; if (roles[userRole] && roles[userRole].can.includes(permission)) { next(); } else { res.status(403).send('Forbidden'); } };
}
  1. canミドルウェアを使用してルートを保護します:
app.get('/posts', can('read'), (req, res) => { // GET /postsルートを処理する
}); app.post('/posts', can('write'), (req, res) => { // POST /postsルートを処理する
}); app.delete('/posts/:id', can('delete'), (req, res) => { // DELETE /posts/:idルートを処理する
});

属性ベースのアクセス制御(ABAC)

属性ベースのアクセス制御(ABAC) は、認可を実装する別のアプローチです。ユーザー属性、環境、およびリソースに基づいて権限を付与します。ExpressアプリケーションでABACを実装するには、次の手順に従ってください。

  1. 属性を評価するポリシー関数を定義します:
function policy(user, action, resource) { if (action === 'read' && user.role === 'user') { return true; } if (action === 'write' && user.role === 'admin') { return true; } return false;
}
  1. ポリシーをチェックするミドルウェアを実装します:
function checkPolicy(action, resource) { return (req, res, next) => { if (policy(req.user, action, resource)) { next(); } else { res.status(403).send('Forbidden'); } };
}
  1. checkPolicyミドルウェアを使用してルートを保護します:
app.get('/posts', checkPolicy('read', 'post'), (req, res) => { // GET /postsルートを処理する
}); app.post('/posts', checkPolicy('write', 'post'), (req, res) => { // POST /postsルートを処理する
});

まとめ

この記事では、Node.js Expressアプリケーションにおける認証と認可の基本概念を説明しました。認証と認可の違いについて説明し、Passport.js、JWT、RBAC、ABACなどの実装方法について説明しました。これらの技術を実装することで、アプリケーションを効果的に保護し、権限のないアクセスから機密リソースを守ることができます。

最後

いつもお世話になっています。この記事を楽しんで、新しいことを学べたら嬉しいです。😊

今度の記事でお会いしましょう!この記事が気に入ったら、私を応援するために「LIKE」を押して登録してください。ありがとうございました。

Ref

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cách mình "hack" được vào hẹ thống của SMAS để xem điểm.

Cách mà mình "hack" được vào hệ thống của SMAS. Thật ra dùng từ hack cũng không đúng lắm, chỉ là một vài trick để lừa hệ thống mà thôi.

0 0 145

- vừa được xem lúc

[NodeJs] Tạo QR Code trong nodeJs với qrcode

Tạo mã QR Code trong nodejs với qrcode. QR Code là gì. Tạo QR code với qrcode. Cài đặt thư viện qrcode.

0 0 34

- vừa được xem lúc

Áp dụng kiến trúc 3 Layer Architecture vào project NodeJS

The problem encountered. Các framework nodejs phổ biết như Express cho phép chúng ta dễ dàng tạo ra Resful API xử lí các request từ phía client một cách nhanh chóng và linh hoạt.

0 0 80

- vừa được xem lúc

Router, Controller trong Express

Mở đầu. Xin chào các bạn mình đã quay trở lại rồi đây, tiếp tục với series Nodejs cơ bản thì hôm nay mình sẽ giới thiệu đến các bạn Express Router và Controller.

0 0 40

- vừa được xem lúc

Xây dựng CRUD RESTful API sử dụng Node, Express, MongoDB.

Introduction. Trong phạm vi bài viết này chúng ta sẽ cùng tìm hiểu về cách tạo restful api với Node, Express và MongoDB. . Xử lý các hoạt động crud.

0 0 225

- vừa được xem lúc

Rate time limit trong NodeJS

Chào các bạn, lại là mình đây. Hôm nay mình xin giới thiệu tới các bạn một kỹ thuật rất hay ho và hữu ích đó là Rate Limiting. 1. Rate Limiting là gì.

0 0 62