Tag: 基本authentication

客户端(angular度2)authentication,谷歌作为服务器(node.js)

在这里,我一直在寻找答案。 我有一个REST端点的nodejs服务器。 每个端点都有isLoggedIn中间件,所以我可以通过电子邮件对用户进行身份validation。 客户端在端口4200上运行,服务器在端口3113上运行。 我想基本上是让我的客户redirect到Google的同意屏幕,如果没有通过身份validation。 由于端口是不同的,我得到: XMLHttpRequest cannot load https://accounts.google.com/o/oauth2/v2/auth?response_type=code&redirect_ur…d=604408607019-ha937stehe6s3nk7ea892rviihrq5n4s.apps.googleusercontent.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. 现在,我还没有尝试过什么… 🙂 我尝试使用CLI代理function(这是一个webpackconfiguration),并将所有/api请求转发到服务器。 我已经添加头到服务器,但后来我意识到,这是谁发送这个错误,而不是我的服务器。 我在这里看到很多相关的post。 到目前为止,我所见过的最好的解决scheme是放置一个loginbutton,并将呼叫置于href ,因为我不能在域之间进行Ajax调用。 这真的是最好的解决scheme吗? 在服务器上运行身份validation代码时,是不是有其他方法可以从客户端进行身份validation? 我甚至将所有相关端口添加到了API开发者,并将callback调用添加到Google开发者控制台。 顺便说一句,当一个客户端从同一个端口服务时,所有的工作都很好。 谢谢。

成功login后,Azureauthentication返回到login页面 – node.js

我有一个node.js应用程序,并将其上传到Azure。 我已经将Active Directory支持包括在我们的应用程序中。 使用高级选项,我已经设置客户端ID和所需的细节到应用程序。 在Node.js应用程序中,我使用passport-azure-ad来validation用户。 我已经configuration了客户端ID,秘密,返回url等,我用下面的get方法来调用蔚蓝authentication。 app.get('/login', passport.authenticate('azuread-openidconnect', { failureRedirect: '/hello' }), function(req, res){ res.sendFile(path.join(__dirname+'/views/index.html')); }); 当我部署代码并在Azure中运行它时,它首先将我带到azure色的login页面,一旦input正确的电子邮件和密码,它就会再次将我redirect到login页面。 它也没有抛出任何错误。 请帮忙避免这个redirect到login页面的循环过程。 提前致谢。

使用来自envvariables的令牌从私有Github repo安装NPM包

我有一个私人GitHub回购协议中的Node项目,其中包括对另一个私人GitHub回购协议的NPM依赖,例如: { "dependencies": { "my-secret-module": "git+ssh://github.com/user/repo-name.git#sha" } } 该项目正在Heroku上运行,其中npm install步骤在部署过程中失败,同时尝试从私人仓库安装。 我知道在GitHub上生成OAuth令牌的可能性,并在上面的URL中使用它们,如下所示: git+ssh://<token>@github.com/user/repo-name.git ,但是我不想要在版本控制中存储令牌。 最理想的情况是将标记存储在环境variables中,所以我的问题是:是否可以使用环境variables对GitHub进行身份validation? 还是其他类似的绑定到Heroku应用程序?

如何使用量angular器处理浏览器的本地authentication对话框

我需要使用量angular器(nodeJs)testing网页。 此网站受到保护,当您尝试input时,浏览器将显示其本地身份validation对话框。 我们曾经把用户名和密码添加到像这样的url https://username:password@example.com 但是这种方法在Chrome或Firefox中不起作用(我不记得是哪一个)。 如果填写对话框并提交,则浏览器再次发出相同的请求,添加以下标题 header: { Authorization: "Basic bF0A23Zwdfsf==" } 回到量angular器,脚本的第一件事是 browser.driver.get('https://example.com'); 所以我的第一个问题是:是否有可能以某种方式添加标题? 我也试着在onPrepare里调用fetch (这是在browser.driver.get之前) browser.driver.executeScript(function () { let headers = new Headers({"Authorization": "Basic " + new Buffer("username" + ":" + "password").toString("base64")}); let myInit = {method: "GET", headers: headers}; fetch("https://example.com", headers); }); 出于某种原因, fetch似乎忽略Authorization标头(它不存在于请求中)。 无论如何,这个问题变得越来越复杂,这就是我在这里发布的原因。 有谁知道解决scheme或有build议?

如何debugging护照

我不能为了我的生活似乎弄清楚如何debugging护照战略。 我只是在概念上做了一些可怕的错误? 我一直在这里b了我大概10个小时,还没有接近一点。 这是我第一次使用护照。 在这个特定的场景中,我正在使用passport-jwt。 我知道对象键是不正确的,但我只是想通过使用console.log()跟踪通过服务器的path,所以我明白事情是如何工作的。 我甚至没有达到passport.use( new JwtStrategy(..)) 。 我遗漏了不必要的代码。 连接到我的mongodb是好的,我的mongoose模式是好的。 我正在testing使用testing路线server.get('/fakelogin', …)做一个请求 – 承诺POST到/api/login 。 我也尝试使用curl -X POST并修改发布path到url查询参数。 我只是不断得到一个“未经授权”的错误,没有护照战略代码console.log有史以来就开始。 服务器 var server = express(); server.use(passport.initialize()); let opts = { jwtFromRequest: ExtractJwt.fromBodyField('token'), secretOrKey: config.apiKey, algorithms: [ 'HS256', 'HS384' ], ignoreExpiration: true }; passport.use(new JwtStrategy(opts, function( jwt_payload, done ) { // mongoose users query against […]

如何正确testing一个具有身份validation的RESTful API

我想为我的Node.js API编写自动化testing,而且我已经开始使用Mocha和Chai,使用chai-http来pipe理请求。 我有一个路由www.example.com/users,并成功地编写了自动化testing注册用户和login用户,所以我以为我在路上,但现在几乎所有其他路线需要用户进行身份validation! 由于我在testing期间嘲笑数据库(使用mongoose进行模仿),我已经注意到了这种依赖关系。 但是,这带来了一个问题,我如何获得一个用户身份validation,但仍然不暴露我的testing多个,可能会改变的代码段? 通过程序的stream程相对简单:在请求安全资源时,会有中间件对用户进行身份validation,然后将user对象附加到请求上。 那么这个user对象就可以让路由访问用户的信息并调用数据库。 所以,我想一个理想的解决scheme将一个user对象附加到请求对象,一旦调用了API。 由于我是相对较新的testing,我欢迎任何反馈,让我洞察到更好的testing程序。

在HTTP基本authentication中,为什么存储令牌更好?

我在HTTPS上运行的React中有一个丰富的JS应用程序,服务器端的NodeJS中有一个API监听客户端请求。 用户不是开发者; 实际上他们几乎不用电脑。 我想要一个简单的login/密码表单(他们熟悉的东西)进行身份validation。 build议存储令牌,而不是存储用户名/密码客户端,并将其包含在每个API请求中。 如果我理解正确,DB中的服务器端,这个令牌也存储在用户表中的用户名/密码旁边。 令我困惑的是,这个令牌不会像密码那样被散列(例如用bcrypt)。 所以不是在数据库中有明确的密码吗? 当然,我错过了一些关于令牌的重要东西。 那么如果任何人都可以引导我如何在NodeJS中使用token来pipe理http基本身份validation,那么将会非常感激:)

如何在使用mocha / chai进行unit testing时覆盖护照authentication?

我尝试设置app.request.isAuthenticated = function(){return true;}在另一个答案build议,但这不适合我。 这是在我想要validation的路由上用作中间件的身份validation方法: const authenticate = [passport.authenticate(['bearer'], {session: false}), (req, res, next) => { if (req.isAuthenticated()) { return next(null); } else { return res.status(401).send('Unauthorized'); } }]; 典型的安全调用看起来像这样 router.get('/securedInfo', authenticate, function(req,res,next){ // do stuff }); 我也不想在这个testing中进行身份validation,因为我想单独testing我的RESTful APItesting和我的身份validation逻辑(因为后者很可能随时间而改变)。

护照facebook战略投掷数据必须是使用Node.js的string

我正在使用Node.js和passport facebook strategy来login客户端的应用程序。 我跟着护照文件,但仍然有一个错误: 数据必须是一个string或缓冲区 。 策略redirect到Facebook页面,但testing后接受应用程序的条件,它redirect到主页,应用程序抛出此错误: StatusCodeError: 500 – {"error":"Data must be a string or a buffer"} 这是我写代码的auth.js代码。 我正在使用jsonwebtoken模块来签署用户ID。 exports.facebookStrategy = new FacebookStrategy({ clientID: config.auth.facebook.clientID, clientSecret: config.auth.facebook.clientSecret, callbackURL: config.auth.facebook.callbackURL, profileFields: ['id', 'displayName', 'email'] }, function (accessToken, refreshToken, profile, done) { var userProfile = { username: profile._json.id, name: profile._json.name, email: profile._json.email, facebook: true } findOrCreate(userProfile, […]

使用LDAP的Node.js身份validation机制

我希望实现一个login机制到我的应用程序,因为用户正在坐在LDAP服务器,而不是在本地数据库。 我一直在考虑实施passport.js,但我想弄清楚解决scheme的其他部分 – 我可以selectpassport-ldap ,或者我可以尝试…以“本地”策略实施解决scheme: 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); } if (!user.verifyPassword(password)) { return done(null, false); } return done(null, user); }); } )); 作为function(user, password, done)可能被植入ldapjs 。 我不确定哪个选项会更好。 我认为第二个可能会给我更多的login过程控制,但使用LDAP策略可能会更有意义。 有什么build议么?