Test dans un environnement réel
Test en production sans filigrane.
Fonctionne partout où vous en avez besoin.
La création de contenu dynamique et une sécurité solide sont essentielles pour les applications web d'aujourd'hui. En permettant aux applications de fournir un accès restreint ou limité aux ressources au nom d'un utilisateur sans divulguer d'informations d'identification,OAuth 2.0 est devenu le cadre de facto pour une autorisation sûre. Le module Node.js adaptable OAuth2orize fournit un cadre solide pour la gestion de l'authentification sécurisée basée sur les jetons d'accès, ce qui facilite la configuration des serveurs d'autorisation OAuth 2.0.
Parallèlement, la capacité de générer et de manipuler des documents PDF de manière programmatique constitue une demande typique dans plusieurs domaines, notamment la production de rapports et les systèmes de facturation. La génération, l'édition et le rendu de documents PDF simples sont facilités par IronPDF, un utilitaire puissant dans l'environnement Node.js.
Ce tutoriel construit une application Node.js dynamique et sûre en combinant les meilleures fonctionnalités d'IronPDF et d'OAuth2orize. Vous découvrirez comment gérer l'authentification et l'autorisation des utilisateurs en configurant un serveur OAuth 2.0 avec OAuth2orize. Vous apprendrez également à utiliser IronPDF pour créer des documents PDF accessibles via des points de terminaison d'API nécessitant une authentification.
Un framework Node.js appeléOAuth2orize oAuth 2.0 fournit aux développeurs les ressources dont ils ont besoin pour créer des serveurs d'autorisation OAuth 2.0. Elle permet de traiter et de gérer le flux de travail complexe d'OAuth 2.0, qui comprend la création, la validation et l'administration de jetons de rafraîchissement. Cette bibliothèque étant conçue pour interagir avec le framework Express, les développeurs qui sont déjà familiarisés avec Express la trouveront tout à fait naturelle.
Grant Types Support
L'octroi d'un code d'autorisation convient mieux aux applications côté serveur dans lesquelles le code d'autorisation peut être stocké en toute sécurité par le client, puis échangé contre un jeton d'accès.
Client Credentials Grant : Utilisé dans les interactions entre machines(serveurs et clients) le client doit s'authentifier à l'aide de requêtes API pour recevoir un jeton d'accès.
Intégration d'intergiciels
Intégration avec Passport.js : OAuth2orize s'intègre parfaitement à Passport.js, un intergiciel d'authentification riche en fonctionnalités pour Node.js, permettant aux développeurs d'utiliser une variété de techniques d'authentification en plus d'OAuth 2.0.
Token Management
Jetons de rafraîchissement : Il s'agit de jetons de longue durée qui permettent aux utilisateurs d'obtenir de nouveaux jetons d'accès sans avoir à s'authentifier à nouveau.
**Subventions et extensions personnalisées
Grâce à la grande adaptabilité d'OAuth2orize, les développeurs peuvent créer des types de subventions et de réponses sur mesure pour répondre aux exigences d'applications particulières.
OAuth2orize gère l'émission, la validation et la révocation des jetons en toute sécurité, favorisant ainsi la sécurité des applications OAuth 2.0. Il est recommandé aux développeurs d'adhérer aux meilleures pratiques d'OAuth 2.0, qui comprennent l'utilisation de HTTPS, la validation des URI de redirection et le stockage des jetons dans un emplacement sécurisé.
Suivez ces instructions pour configurer et établir un serveur d'autorisation OAuth 2.0 dans Node.js en utilisant OAuth2orize. Nous allons définir des types de subventions, construire des API pour l'autorisation et l'échange de jetons, et mettre en place un serveur d'autorisation. Pour l'authentification des utilisateurs dans cette configuration, Passport.js, OAuth2orize et Express seront utilisés.
Tout d'abord, initialisez votre projet Node.js et installez les dépendances nécessaires.
npm install express
npm install oauth2orize
npm install passport
npm install passport-local
npm install passport-http
npm install body-parser
npm install passport-http-bearer
npm install express-session uuid
npm install connect-ensure-login
npm install express
npm install oauth2orize
npm install passport
npm install passport-local
npm install passport-http
npm install body-parser
npm install passport-http-bearer
npm install express-session uuid
npm install connect-ensure-login
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install express npm install oauth2orize npm install passport npm install passport-local npm install passport-http npm install body-parser npm install passport-http-bearer npm install express-session uuid npm install connect-ensure-login
Pour configurer le serveur, créez un fichier appelé server.js et ajoutez-y le code suivant :
const express = require('express');
const oauth2orize = require('oauth2orize');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const BasicStrategy = require('passport-http').BasicStrategy;
const BearerStrategy = require('passport-http-bearer').Strategy;
const bodyParser = require('body-parser');
const session = require('express-session');
const { v4: uuidv4 } = require('uuid');
// In-memory data storage (use a database in production)
const users = [{ id: '1', username: 'user', password: 'pass' }];
const clients = [{ id: 'client', secret: 'secret', redirectUris: ['http://localhost:3000/cb'] }];
const tokens = [];
// Passport configuration
passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser((id, done) => {
const user = users.find(user => user.id === id);
done(null, user);
});
passport.use(new LocalStrategy((username, password, done) => {
const user = users.find(user => user.username === username && user.password === password);
if (user) return done(null, user);
return done(null, false);
}));
passport.use(new BasicStrategy((clientId, clientSecret, done) => {
const client = clients.find(client => client.id === clientId && client.secret === clientSecret);
if (client) return done(null, client);
return done(null, false);
}));
passport.use(new BearerStrategy((token, done) => {
const accessToken = tokens.find(t => t.accessToken === token);
if (accessToken) {
const user = users.find(user => user.id === accessToken.userId);
if (user) return done(null, user);
}
return done(null, false);
}));
// Create OAuth 2.0 server
const server = oauth2orize.createServer();
// Grant authorization codes
server.grant(oauth2orize.grant.code((client, redirectUri, user, ares, done) => {
const code = uuidv4();
tokens.push({ code, clientId: client.id, redirectUri, userId: user.id });
done(null, code);
}));
// Exchange codes for user granting access tokens
server.exchange(oauth2orize.exchange.code((client, code, redirectUri, done) => {
const token = tokens.find(t => t.code === code && t.clientId === client.id && t.redirectUri === redirectUri);
if (!token) return done(null, false);
const accessToken = uuidv4();
tokens.push({ accessToken, userId: token.userId, clientId: client.id });
done(null, accessToken);
}));
// Express application setup
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({ secret: 'secret', resave: false, saveUninitialized: false }));
app.use(passport.initialize());
app.use(passport.session());
// Authorization endpoint
app.get('/authorize', (req, res) => {
res.send('<form action="/authorize/decision" method="post"><button type="submit">Allow</button></form>');
});
app.post('/authorize/decision', (req, res, next) => {
server.decision()(req, res, next);
});
// Token endpoint
app.post('/token',
passport.authenticate('basic', { session: false }),
server.token(),
server.errorHandler()
);
// Protected resource endpoint
app.get('/resource', passport.authenticate('bearer', { session: false }), (req, res) => {
res.json({ message: 'Access granted to protected resource!' });
});
// Start the server
const port = 3000;
app.listen(port, () => {
console.log(`OAuth2orize server is running on http://localhost:${port}`);
});
const express = require('express');
const oauth2orize = require('oauth2orize');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const BasicStrategy = require('passport-http').BasicStrategy;
const BearerStrategy = require('passport-http-bearer').Strategy;
const bodyParser = require('body-parser');
const session = require('express-session');
const { v4: uuidv4 } = require('uuid');
// In-memory data storage (use a database in production)
const users = [{ id: '1', username: 'user', password: 'pass' }];
const clients = [{ id: 'client', secret: 'secret', redirectUris: ['http://localhost:3000/cb'] }];
const tokens = [];
// Passport configuration
passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser((id, done) => {
const user = users.find(user => user.id === id);
done(null, user);
});
passport.use(new LocalStrategy((username, password, done) => {
const user = users.find(user => user.username === username && user.password === password);
if (user) return done(null, user);
return done(null, false);
}));
passport.use(new BasicStrategy((clientId, clientSecret, done) => {
const client = clients.find(client => client.id === clientId && client.secret === clientSecret);
if (client) return done(null, client);
return done(null, false);
}));
passport.use(new BearerStrategy((token, done) => {
const accessToken = tokens.find(t => t.accessToken === token);
if (accessToken) {
const user = users.find(user => user.id === accessToken.userId);
if (user) return done(null, user);
}
return done(null, false);
}));
// Create OAuth 2.0 server
const server = oauth2orize.createServer();
// Grant authorization codes
server.grant(oauth2orize.grant.code((client, redirectUri, user, ares, done) => {
const code = uuidv4();
tokens.push({ code, clientId: client.id, redirectUri, userId: user.id });
done(null, code);
}));
// Exchange codes for user granting access tokens
server.exchange(oauth2orize.exchange.code((client, code, redirectUri, done) => {
const token = tokens.find(t => t.code === code && t.clientId === client.id && t.redirectUri === redirectUri);
if (!token) return done(null, false);
const accessToken = uuidv4();
tokens.push({ accessToken, userId: token.userId, clientId: client.id });
done(null, accessToken);
}));
// Express application setup
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({ secret: 'secret', resave: false, saveUninitialized: false }));
app.use(passport.initialize());
app.use(passport.session());
// Authorization endpoint
app.get('/authorize', (req, res) => {
res.send('<form action="/authorize/decision" method="post"><button type="submit">Allow</button></form>');
});
app.post('/authorize/decision', (req, res, next) => {
server.decision()(req, res, next);
});
// Token endpoint
app.post('/token',
passport.authenticate('basic', { session: false }),
server.token(),
server.errorHandler()
);
// Protected resource endpoint
app.get('/resource', passport.authenticate('bearer', { session: false }), (req, res) => {
res.json({ message: 'Access granted to protected resource!' });
});
// Start the server
const port = 3000;
app.listen(port, () => {
console.log(`OAuth2orize server is running on http://localhost:${port}`);
});
const express = require( 'express');
const oauth2orize = require( 'oauth2orize');
const passport = require( 'passport');
const LocalStrategy = require( 'passport-local').Strategy;
const BasicStrategy = require( 'passport-http').BasicStrategy;
const BearerStrategy = require( 'passport-http-bearer').Strategy;
const bodyParser = require( 'body-parser');
const session = require( 'express-session');
'INSTANT VB TODO TASK: The following line could not be converted:
const
If True Then
v4:
uuidv4 } = require( 'uuid');
' In-memory data storage (use a database in production)
const users = ({ id: "1"c, username: 'user', password: 'pass' }];
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'const clients = [{ id: 'client', secret: 'secret', redirectUris: ['http: const tokens = []; passport.serializeUser((user, done) => done(Nothing, user.id)); passport.deserializeUser((id, done) => { const user = users.find(user => user.id === id); done(Nothing, user); }); passport.use(New LocalStrategy((username, password, done) => { const user = users.find(user => user.username === username && user.password === password); if(user) Return done(Nothing, user); Return done(Nothing, False); })); passport.use(New BasicStrategy((clientId, clientSecret, done) => { const client = clients.find(client => client.id === clientId && client.secret === clientSecret); if(client) Return done(Nothing, client); Return done(Nothing, False); })); passport.use(New BearerStrategy((token, done) => { const accessToken = tokens.find(t => t.accessToken === token); if(accessToken) { const user = users.find(user => user.id === accessToken.userId); if(user) Return done(Nothing, user); } Return done(Nothing, False); })); const server = oauth2orize.createServer(); server.grant(oauth2orize.grant.code((client, redirectUri, user, ares, done) => { const code = uuidv4(); tokens.push({ code, clientId: client.id, redirectUri, userId: user.id }); done(Nothing, code); })); server.exchange(oauth2orize.exchange.code((client, code, redirectUri, done) => { const token = tokens.find(t => t.code === code && t.clientId === client.id && t.redirectUri === redirectUri); if(!token) Return done(Nothing, False); const accessToken = uuidv4(); tokens.push({ accessToken, userId: token.userId, clientId: client.id }); done(Nothing, accessToken); })); const app = express(); app.use(bodyParser.urlencoded({ extended: True })); app.use(session({ secret: 'secret', resave: False, saveUninitialized: False })); app.use(passport.initialize()); app.use(passport.session()); app.@get('/authorize', (req, res) => { res.send('<form action="/authorize/decision" method="post"><button type="submit"> Allow</button></form>'); }); app.post('/authorize/decision', (req, res, @next) => { server.decision()(req, res, @next); }); app.post('/token', passport.authenticate('basic', { session: False }), server.token(), server.errorHandler()); app.@get('/resource', passport.authenticate('bearer', { session: False }), (req, res) => { res.json({ message: 'Access granted @to protected resource!' }); }); const port = 3000; app.listen(port, () => { console.log(`OAuth2orize server is running on http: });
Vous avez utilisé avec succès OAuth2orize dans Node.js pour établir et configurer un serveur d'autorisation OAuth 2.0 en suivant les étapes suivantes. Cette configuration montre comment gérer les subventions pour les codes d'autorisation, les convertir en jetons d'accès et utiliser les jetons de porteur pour sécuriser les points d'extrémité de l'API. Pensez à mettre en œuvre un traitement approprié des erreurs, à protéger les données sensibles et à stocker les utilisateurs, les clients et les jetons dans une base de données durable pour un environnement de production.
Pour commencer à intégrer OAuth2orize et IronPDF dans une application Node.js, vous devez d'abord utiliser OAuth2orize pour créer un serveur d'autorisation OAuth 2.0 et IronPDF pour mettre en œuvre la génération de PDF. Vous trouverez ci-dessous un didacticiel détaillé pour vous aider à y parvenir.
IronPDF est une collection de bibliothèques d'applications conçues pour faciliter la création, la modification et l'organisation des fichiers PDF. Les développeurs peuvent ajouter des en-têtes et des filigranes, combiner plusieurs pages PDF, extraire du texte et des images de documents HTML et effectuer plusieurs autres tâches avec cet outil. L'API conviviale et la documentation complète d'IronPDF permettent aux développeurs de créer facilement et automatiquement des documents PDF de haute qualité. IronPDF dispose de toutes les fonctionnalités et capacités nécessaires pour améliorer les flux de travail documentaires et fournir d'excellentes expériences utilisateur dans divers contextes, notamment la création de factures, de rapports et de documentation.
La conversion de HTML en PDF est un moyen rapide et facile de traiter tout type de texte HTML, y compris CSS et JavaScript.
Fusion de fichiers PDF : Combinez plusieurs documents PDF en un seul fichier PDF pour simplifier les tâches de gestion des documents.
Extraction de texte et d'image : Supprimez le texte et les images des fichiers PDF afin de pouvoir les utiliser pour une analyse plus poussée ou le traitement des données.
Filigrane : Vous pouvez appliquer des filigranes de texte ou d'image aux pages PDF à des fins d'image de marque ou de sécurité.
Inclure l'en-tête et le pied de page : Vous pouvez ajouter un message personnalisé ou des numéros de page aux en-têtes et pieds de page des documents PDF.
Pour activer la fonctionnalité d'IronPDF, installez les packages nécessaires de Node.js en utilisant le gestionnaire de paquets node.
npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install @ironsoftware/ironpdf
Ajoutez le code suivant dans le code du serveur d'autorisation OAuth 2.0 afin d'intégrer IronPDF pour la génération de PDF.
const IronPdf = require("@ironsoftware/ironpdf");
const document=IronPdf.PdfDocument;
var config=IronPdf.IronPdfGlobalConfig
// Protected resource endpoint to generate PDF
app.get('/generate-pdf', passport.authenticate('bearer', { session: false }), async (req, res) => {
const pdf = new IronPDF();
// Example HTML content for PDF generation
const htmlContent = `
<html>
<head>
<title>PDF Report</title>
</head>
<body>
<h1>Secure PDF Report</h1>
<p>This PDF was generated by Ironpdf.</p>
</body>
</html>
`;
try {
const pdf = (await document.fromHtml(htmlContent));
const pdfBuffer=await pdf.saveAsBuffer();
res.writeHead(200, {
'Content-Type': 'application/pdf',
'Content-Disposition': 'attachment; filename=report.pdf',
'Content-Length': pdfBuffer.length
});
res.end(pdfBuffer);
} catch (error) {
res.status(500).send('Error generating PDF');
}
});
const IronPdf = require("@ironsoftware/ironpdf");
const document=IronPdf.PdfDocument;
var config=IronPdf.IronPdfGlobalConfig
// Protected resource endpoint to generate PDF
app.get('/generate-pdf', passport.authenticate('bearer', { session: false }), async (req, res) => {
const pdf = new IronPDF();
// Example HTML content for PDF generation
const htmlContent = `
<html>
<head>
<title>PDF Report</title>
</head>
<body>
<h1>Secure PDF Report</h1>
<p>This PDF was generated by Ironpdf.</p>
</body>
</html>
`;
try {
const pdf = (await document.fromHtml(htmlContent));
const pdfBuffer=await pdf.saveAsBuffer();
res.writeHead(200, {
'Content-Type': 'application/pdf',
'Content-Disposition': 'attachment; filename=report.pdf',
'Content-Length': pdfBuffer.length
});
res.end(pdfBuffer);
} catch (error) {
res.status(500).send('Error generating PDF');
}
});
const IronPdf = require("@ironsoftware/ironpdf")
const document=IronPdf.PdfDocument
Dim config=IronPdf.IronPdfGlobalConfig app.get( '/generate-pdf', passport.authenticate('bearer', { session: False }), async(req, res) =>
If True Then
const pdf = New IronPDF()
const htmlContent = ` (Of html) (Of head) (Of title) PDF Report</title> </head> (Of body) (Of h1) Secure PDF Report</h1> (Of p) This PDF was generated by Ironpdf.</p> </body> </html> `
Try
const pdf = (Await document.fromHtml(htmlContent))
const pdfBuffer=Await pdf.saveAsBuffer()
res.writeHead(200, { 'Content-Type': 'application/pdf', 'Content-Disposition': 'attachment; filename=report.pdf', 'Content-Length': pdfBuffer.length });
res.end(pdfBuffer)
Catch e1 As [error]
res.status(500).send( '@Error generating PDF');
End Try
End If
)
Le code fourni montre comment intégrer IronPDF pour la génération dynamique de PDF et construire un serveur d'autorisation OAuth 2.0 à l'aide d'OAuth2orize dans Node.js. Les dépendances essentielles telles que Express, Passport et UUID sont incluses dans la configuration. Pour des raisons de simplicité, les utilisateurs et les clients sont enregistrés dans des tableaux en mémoire ; cependant, une base de données doit être utilisée dans un environnement de production.
Le code gère la validation du client et l'authentification de l'utilisateur en définissant de nombreuses techniques Passport. Les codes d'autorisation, dans lesquels les utilisateurs permettent aux clients d'accéder aux ressources en leur nom, sont gérés par OAuth2orize. Le client peut échanger un code d'autorisation contre un jeton d'accès après en avoir obtenu un. Seules les requêtes authentifiées sont autorisées à créer des PDF grâce à la technique du jeton Bearer utilisée pour protéger le point de terminaison /generate-pdf.
Le contenu HTML est converti par le point final à l'aide d'IronPDF en un document de typeDocument PDFla traduction est ensuite renvoyée au client. Cette intégration fournit un exemple de l'utilisation d'OAuth 2.0 pour sécuriser les points d'extrémité de l'API et fournir un contenu dynamique de manière évolutive et sûre.
En conclusion, l'utilisation d'OAuth2orize et d'IronPDF dans une application Node.js aboutit de manière forte et sûre à la production de PDF de bonne qualité. Les données sensibles sont protégées car OAuth2orize offre une forte autorisation OAuth 2.0, garantissant que seuls les utilisateurs autorisés et authentifiés peuvent utiliser les services de création de PDF. IronPDF, quant à lui, permet de convertir simplement et efficacement des informations HTML en fichiers PDF de qualité professionnelle.
Cette intégration offre aux développeurs une solution évolutive et simple à mettre en œuvre, tout en améliorant la sécurité, la flexibilité et l'expérience utilisateur. Grâce à ces technologies, les développeurs peuvent produire des applications conviviales, fiables, sûres et conformes aux normes de sécurité et de fonctionnalité actuelles.
En ajoutant les technologies IronPDF et Iron Software à votre pile de développement d'applications d'entreprise, IronPDF peut garantir des solutions logicielles haut de gamme riches en fonctionnalités pour les clients et les utilisateurs finaux. En outre, les initiatives, les systèmes dorsaux et l'optimisation des processus seront facilités par cette base solide. IronPDFest disponible pour 749 $. Ces technologies sont une excellente option pour les projets de développement logiciel modernes en raison de leur documentation approfondie, de leur communauté de développeurs en ligne active et de leurs mises à jour régulières.
9 produits de l'API .NET pour vos documents de bureau