Passport-Configure

news/2024/11/23 2:27:03/

Configure

使用Passport实现认证需要配置三方面:

  1. 认证策略
  2. Application middleware
  3. Sessions (optional)

Strategies

Passport uses what are termed strategies to authenticate requests. 策略的范围包括username和password,授权认证使用 OAuth,开放认证使用OpenID.

使用Passport之前, strategy (or strategies) 必须配置好。

Strategies可以通过 use() 函数来实现。 如下使用LocalStrategy 实现 username/password 认证

var passport = require('passport'), LocalStrategy = require('passport-local').Strategy;passport.use(new LocalStrategy(function(username, password, done) {User.findOne({ username: username }, function (err, user) {if (err) { return done(err); }if (!user) {return done(null, false, { message: 'Incorrect username.' });}if (!user.validPassword(password)) {return done(null, false, { message: 'Incorrect password.' });}return done(null, user);});}
));
Verify Callback

上述事例介绍了一个很重要的概念,. Strategies 需要一个 verify callback,目的是找到拥有凭证的user。

当Passport认证一个请求时,他解析请求包含的凭证,然后他调用回调函数使用这些凭证作为参数,当前为 username and password. ,如果有效,执行 done 返回给Passport经过认证的用户。

return done(null, user);

如果凭证无效,(例如,密码是错的)。 done 应当回调 false来表明认证错误而不是user。

return done(null, false);

可以提供额外的信息消息,以指示该失败的原因。适用于显示一个flash消息,提示用户再次尝试的。

return done(null, false, { message: 'Incorrect password.' });

最后,如果在验证凭据发生了异常(例如,如果数据库不可用)done 应该执执行error,这符合node的风格

return done(err);

注意,区别两种失败的原因是非常重要的。后者是服务器异常,其中 err 被设置为null 。 认证失败是正常情况,其中服务器状态正常的。 请确定 err 为 null,并且使用最后一个参数传递一些附加信息。

通过这种委托的方式, verify callback 使 Passport 与数据库没有耦合。应用程序可以自由选择的用户信息是如何存储的,未经身份验证层施加的任何假设。

Middleware

在基于 Connect 或 Express 的应用程序中,passport.initialize() 中间件是必须的启动 Passport.。如果应用程序使用持久的登录sessions, passport.session() 中间件也必须要启用。

app.configure(function() {app.use(express.static('public'));app.use(express.cookieParser());app.use(express.bodyParser());app.use(express.session({ secret: 'keyboard cat' }));app.use(passport.initialize());app.use(passport.session());app.use(app.router);
});

注意,启动session是完全可选的,尽管在大多数程序中是推荐的。如果可用, express.session() 一定要在 passport.session() 之前,这样才能确保在登录会话以正确的顺序恢复。

Sessions

在传统的web程序中,提供凭证来认证只是出现在登录请求中。如果认证成功,一个 session 就会被建立并保存一个cookie在用户浏览器。

每个后续请求将不包含凭据,而是用于标识会话的唯一的cookie。为了支持登录会话,Passport 会从session中序列化和反序列化 user 实例。

passport.serializeUser(function(user, done) {done(null, user.id);
});passport.deserializeUser(function(id, done) {User.findById(id, function(err, user) {done(err, user);});
});

在这个例子中,只有用户ID被序列化至session中,并保持会话小中存储的数据量。当收到后续请求,这个ID是用来查找用户,这将恢复到 req.user.

序列化和反序列化逻辑由应用程序提供,允许应用程序选择适当的数据库和/或对象映射,而不强加的身份验证层。


http://www.ppmy.cn/news/618765.html

相关文章

Passport 你的网站(在你的WebSite上实现MS Passport )上

Passport 你的网站 (上) -------(在你的WebSite上实现MS Passport ) 小气的神 2001-11-12 Article Type: In-Depth 难度等级:4/9 版本:1.01 Passport 最早出现在1999年,当时只是为满足MS收购Ho…

Laravel Passport认证-多表、多字段解决方案

1. 概述 API 通常使用令牌(token)进行认证并且在请求之间不维护会话(Session)状态。Laravel 官方扩展包 Laravel Passport 让 API 认证变得轻而易举,Passport 基于 Alex Bilbie 维护的 League OAuth2 server&#xff…

Nodejs利用passport验证用户登录

passport验证用户登录 最近学习用nodejsexpresssession实现用户登录,绕不开使用passport,系统记录一下学习和实践过程 1. Passport简介 passport.js是Nodejs中的一个做登录验证的中间件,极其灵活和模块化,并且可与Express、Sails…

jsd2205-csmall-passport(Day13)

1. 解析JWT时可能出现的错误 如果使用过期的JWT,在解析时将出现错误: io.jsonwebtoken.ExpiredJwtException: JWT expired at 2022-09-06T17:33:03Z. Current time: 2022-09-08T09:04:26Z, a difference of 142283930 milliseconds. Allowed clock sk…

Portal认证

Portal认证通常又称Web认证,用户上网时,必须在Portal认证页面进行认证,如果未认证成功,仅可以访问特定的网络资源,认证成功后,才可以访问其他网络资源。 Portal认证具有以下优点: 简单方便&…

Laravel Passport身份认证写法

在laravel中, 可以用Passport扩展来实现Oauth2.0的接口身份验证。 可以让用户在第三方客户端登录账号。 但是大多数时候只需要用户直接在我们的客户端上登录即可, 这时候需要适合用Passport里面的Personal Access Tokens方式来实现。 下面记录下安装和使…

Passport 授权码模式

交流群 375462817 授权码模式 哔哩哔哩提供一个“微信登陆”的链接,用户点击跳转到微信授权服务器。用户根据微信授权服务器提示登陆微信并确认授权给哔哩哔哩。微信授权服务器返回用户代理(浏览器)一个授权码。用户代理(浏览器…

Microsoft Passport

Microsoft Passport统一的登录认证服务,MS维护用户的账号、密码,提供登录认证服务认证机制:1. 站点加入Passport Network时,得到公钥。站点与Passport Server之间的通讯可以使用数字签名、加密方式,数字签名和加密参考…