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

Blog#201: 🔐Node.js ExpressでOAuth 2.0とOpenID Connectを使用したセキュアなサードパーティ認証の実装

0 0 6

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

Theo Viblo Asia

201

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

OAuth 2.0とOpenID Connectの紹介

OAuth 2.0は、ユーザーの資格情報を公開せずに、サードパーティアプリケーションがユーザーを代表して限定的なリソースにアクセスできるようにする認可フレームワークです。OpenID Connectは、OAuth 2.0の上に構築されたアイデンティティレイヤーで、認証機能を提供します。両方を組み合わせることで、ユーザーを安全に認証し、保護されたリソースへのアクセスを許可することができます。

この記事では、Node.js ExpressアプリケーションでOAuth 2.0とOpenID Connectを実装する方法を説明します。認証用の人気のあるミドルウェアであるPassport.jsを使用して、プロセスを簡素化します。

前提条件

始める前に、以下がマシンにインストールされていることを確認してください。

  • Node.js(v14以上)
  • npm(v6以上)
  • コードエディタ(Visual Studio Codeなど)

Node.js Expressアプリケーションのセットアップ

まず、プロジェクト用の新しいディレクトリを作成し、ターミナルで移動します。次に、npmを使用してプロジェクトを初期化します。

mkdir oauth-openid-nodejs
cd oauth-openid-nodejs
npm init -y

依存関係のインストール

次に、必要なパッケージをインストールします。

npm install express passport passport-openidconnect dotenv

Expressサーバーの作成

プロジェクトのルートにindex.jsファイルを作成し、基本的なExpressサーバーを設定するためのコードを追加します。

const express = require('express');
const app = express(); app.get('/', (req, res) => { res.send('OAuth 2.0とOpenID Connectデモへようこそ!');
}); const PORT = process.env.PORT || 3000;
app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`);
});

Passport.jsでOpenID Connectを使う方法

Passport.jsの設定

まず、プロジェクトのルートに.envファイルを作成し、クライアントID、クライアントシークレット、コールバックURLを保存します。これらは、選択した認証プロバイダ(Google、Facebookなど)から提供されます。

CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secret
CALLBACK_URL=http://localhost:3000/auth/callback

次に、プロジェクトのルートにpassport-setup.jsファイルを作成し、Passport.jsをOpenID Connectストラテジーで設定するためのコードを追加します。

const passport = require('passport');
const OidcStrategy = require('passport-openidconnect').Strategy;
const dotenv = require('dotenv'); dotenv.config(); passport.use( new OidcStrategy( { issuer: 'https://your-auth-provider.com', clientID: process.env.CLIENT_ID, clientSecret: process.env.CLIENT_SECRET, callbackURL: process.env.CALLBACK_URL, scope: 'openid profile email' }, (accessToken, refreshToken, profile, done) => { return done(null, profile); } )
); passport.serializeUser((user, done) => { done(null, user);
}); passport.deserializeUser((user, done) => { done(null, user);
}); module.exports = passport;

選択した認証プロバイダーの適切な発行者URLでhttps://your-auth-provider.comを置き換えます。

Expressサーバーの更新

次に、index.jsファイルを更新して、Passport.jsとOpenID Connectの設定を含めます。

const express = require('express');
const passport = require('./passport-setup');
const session = require('express-session');
const app = express(); // Expressでセッションミドルウェアを使用するように設定
app.use(session({ secret: 'your-session-secret', resave: false, saveUninitialized: true
})); // Passport.jsとセッションサポートを初期化
app.use(passport.initialize());
app.use(passport.session()); app.get('/', (req, res) => { res.send('OAuth 2.0とOpenID Connectデモへようこそ!');
}); // OAuth 2.0認証のためのルートを追加
app.get('/auth', passport.authenticate('openidconnect')); // OAuth 2.0コールバックのためのルートを追加
app.get('/auth/callback', passport.authenticate('openidconnect', { failureRedirect: '/login' }), (req, res) => { res.redirect('/profile'); }
); // ユーザープロファイルのためのルートを追加
app.get('/profile', (req, res) => { if (!req.user) { return res.redirect('/login'); } res.send(`こんにちは、${req.user.displayName}さん!`);
}); // ログインページのためのルートを追加
app.get('/login', (req, res) => { res.send('<a href="/auth">アイデンティティプロバイダーでログイン</a>');
}); const PORT = process.env.PORT || 3000;
app.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`);
});

アプリケーションのテスト

これで、Node.js ExpressアプリケーションでOAuth 2.0とOpenID Connectを使用してテストする準備が整いました。サーバーを起動するには、次のコマンドを実行します。

node index.js

ブラウザでhttp://localhost:3000/loginにアクセスし、「アイデンティティプロバイダーでログイン」のリンクをクリックします。認証プロバイダーのログインページにリダイレクトされます。ログインした後、/profileルートにリダイレクトされ、表示名が含まれた個人的な挨拶が表示されます。

まとめ

この記事では、Passport.jsを使用してNode.js ExpressアプリケーションでOAuth 2.0とOpenID Connectを実装する方法を説明しました。この安全な認証方法により、ユーザーは資格情報をアプリケーションに公開せずに認証できるため、より安全で信頼性の高い認証プロセスが実現されます。

アプリケーションを本番環境にデプロイする際は、サンプルの設定情報(発行者URL、クライアントID、クライアントシークレットなど)を、実際の認証プロバイダーの情報に置き換えることを忘れないでください。

最後

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

今度の記事でお会いしましょう!この記事が気に入ったら、私を応援するために「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 146

- 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 43

- 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 226

- 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 64