使用 oAuth2orize 传递“资源所有者密码流”的可信客户端信息

2024-02-21

我在理解如何使用 oAuth2rize 和 Passport.js 实现资源所有者密码流程时遇到一些问题,特别是在 client_id 和 client_secret 的传输方面,以便我可以对客户端进行一些检查,以确保任何内容进入此端点(/使用特定“密码”授权类型的令牌)是专门的官方应用程序,没有其他基于 ID 和秘密的应用程序。

在构建解决方案时,我可以获得一个令牌,但那是在我尝试对客户端进行任何验证之前。当我尝试访问传递到密码交换策略的客户端变量(发布到端点)时,我收到基于文档的用户凭据(用户名、密码),但不是我在这里需要实现的。

我不知道如何获取实际的客户端凭据,我可以在密码函数源代码中看到,您可以提供其他选项来覆盖对 req['user'] 的默认分配,但这是否意味着我必须提供一些添加到 req 对象的代码类型?

我已经设置了一些集成测试,这是我调用端点的方式(使用 SuperTest):

                request('http://localhost:43862')
                    .post('/oauth/token')
                    .type('form')
                    .send({ grant_type: 'password' })
                    .send({ client_id: 'goodClient' })
                    .send({ client_secret: 'asecret' })
                    .send({ username: '[email protected] /cdn-cgi/l/email-protection' })
                    .send({ password: 'goodpassword' })
                    .expect(200, done);

出于某种原因,我似乎完全过度思考了这一点,但出于某种原因,我完全被难住了......


正如预期的那样,这是一个理解问题,我们使用本地策略而不是 ClientPasswordStrategy,并且在发出令牌之前在密码交换中进行用户验证。

我们现在使用 ClientPasswordStrategy,并在 exchange.password 函数中调用我们的用户 api 的内部调用来验证用户凭据,如果可以,则颁发令牌。

passport.use(new ClientPasswordStrategy(

function(clientId, clientSecret, next){

    Client.verify(clientId, clientSecret, function(err, verified){

        if(!verified){
            return next(null, false);
        }

        next(null, clientId);
    });

}
));

passport.use(new BearerStrategy(
function(token, next) {

    Token.getByToken(token, function(err, tokenObj){

        if(err)
            return next(err);

        if(!tokenObj)
            return next(null, false);

        User.getByUsername(tokenObj.username, function(err, user){

            return next(null, user, { scope: 'all' });
        });
    });
}
));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 oAuth2orize 传递“资源所有者密码流”的可信客户端信息 的相关文章

随机推荐

  • 无边框 TabControl wpf (XP)

    我在 WPF 中设置 TabControl 样式时遇到视觉问题 因此 即使我将选项卡控件的边框设置为 0px 且透明 右侧和底部边框上仍然有一条非常细的线 我没有找到可以解决这个问题的属性 所以也许有人遇到了同样的问题并可以分享 提前致谢
  • LibGDX指导-精灵追踪2D无限随机贝塞尔曲线

    我已经能够将平滑的动画应用于我的精灵并使用加速度计控制它 我的精灵固定为沿 x 轴左右移动 从这里开始 我需要弄清楚如何创建一条垂直的无限波浪线供精灵尝试追踪 我的游戏的目的是让用户用加速度计控制精灵的左 右移动 试图尽可能地追踪永无止境的
  • MVC4 部分视图中的淘汰赛绑定

    简而言之 我相信我所追求的是一种在 MVC4 部分视图中为剔除绑定 javascript 对象提供范围 上下文的方法 这样我就可以重用相同的部分而不会让它们互相干扰 但仍然能够在客户端引用父子视图模型 作为一个出色的菜鸟 更广泛地说 是真正
  • 查找 html 块中最宽单词的宽度

    目标是找到这里最宽单词的宽度 文本是由不同字体的单词组成的句子 如图所示 the html looks like span style font bold 14px Verdana LONGESTW span span style font
  • WSO2 API Manager - 移动应用程序如何连接到 API Manager?

    我们有一个移动应用程序 需要通过 WSO2 API Manager 来访问一些 API 由于oauth2身份验证 我们需要在移动应用程序中存储用户名和密码 安全吗 例如 可以使用用户名和密码登录API Store 对于这种情况有其他解决方案
  • Rails cron 与无论何时,设置环境

    如果您了解用于创建 cron 作业的whengem 这个问题可能才有意义 我的 Schedule rb 中有一个任务 例如 every 1 day at gt 4am do command cd RAILS ROOT rake thinki
  • SQL Server 存储过程能否以比其调用者更高的权限执行?

    我们的 SQL Server 数据库具有报告功能 允许调用者读取但不能写入任何表 因为用户 或者更准确地说 代表用户操作的 Web 应用程序打开的连接 仅具有以下数据读取器权限 数据库 我们希望能够编写一个存储过程 它是一个特殊的 清理报告
  • 为什么使用setTimeout函数会立即执行?

    我正在尝试编写简单的代码setTimeout 但是setTimeout只是不会等待它应该等待的时间并且代码会立即执行 我究竟做错了什么 setTimeout testfunction 2000 您将立即调用该函数并安排其返回值 Use se
  • 神秘的阴谋集团安装问题

    全新安装 Haskell Platform OS X Snow Leopard Platform 2010 1 0 1 这样做会导致简单的序列导致非常奇怪cabal install行为 cabal install time cabal in
  • 如何在 Visual Studio C++ Express 版本中启用自动完成功能?

    请指导我 如何在 VS C 中启用自动完成功能 通过自动完成 我的意思是 当我在控件名称后面加点时 编辑器应该显示一个下拉菜单以供选择 谢谢 开始写作 然后只需按 CTRL SPACE 即可
  • 如何在 Heroku.com 上托管的 Redmine 上安装插件

    刚刚把redmine推送到heroku平台 虽然我无法让积压插件工作 但它在本地工作得很好 我已将本地数据库推送到heroku aswwell Heroku 的公共目录不可写 但默认的 Redmine 假设 要求如此 因为在应用程序服务器启
  • 在 apache Spark 中替换 groupByKey 的方法

    我想知道更换的最佳方法按键分组与另一个操作 基本上我想获得一个RDD int 列表 测量 我的情况 consider measures like RDD of objects measures keyBy getId groupByKey
  • 为什么在自定义 WinRT C++/CX 控件中默认添加 [Windows::Foundation::Metadata::WebHostHidden]?

    当我在 WinRT C CX 项目中创建新控件时 类属性 Windows Foundation Metadata WebHostHidden Visual Studio 2012 默认添加 Example namespace Windows
  • Java:使用 Swing 进行游戏编程

    我对游戏开发比较陌生 我现在已经开发游戏并学习游戏开发2 3个月了 我使用Java 我一直使用 Swing 来制作图形 也就是说 整个游戏都显示在JPanel 用一个Graphics2D目的 到目前为止我没有遇到任何问题 最近 我在最近的项
  • 如何使用 gradle 'api' 依赖项

    我尝试在项目中使用 api 依赖关键字 但收到此错误 指出找不到方法 api 我在一个新项目上尝试过 这是 build gradle 文件 plugins id java group com test version 1 0 SNAPSHO
  • 如何在 wordpress ul 容器周围添加 div

    WordPress 在这个 ul 标签内输出我的子菜单 ul class sub menu 我怎样才能在它周围包裹一个简单的div 最好是通过functions php 来完成此操作 但jquery 也可以工作 虽然使用 jQuery 之类
  • 如何缝合重叠很少的图像?

    我正在尝试使用重叠很少的图像创建全景图 但我知道相机的角度 因此我确切地知道有多少重叠 并且我知道图像的顺序 因此我知道每个图像在全景图中的位置 作为第一步 我只是将图像连接在一起 但结果不够好 有没有办法将位图裁剪为梯形以消除 大部分 重
  • Python 变量的字符串编码

    我知道对于Python u Plants vs Zombies 2 encode utf 8 如果我有一个变量 比如 appName 而不是字符串 我可以这样做吗 appName Plants vs Zombies 2 u appName
  • WiX:补丁安装程序取代以前的版本(1.0.0 -> 1.0.1、1.0.0 -> 1.0.2、1.0.1 -> 1.0.2 等)

    我正在尝试提供一个简单的安装程序包 MSI 我希望通过取代所有以前的补丁的更新 补丁 来支持它 所以我有一个MSI V1 0 0和2个补丁V1 0 1和V1 0 2 用户应该能够只安装最新的补丁 无论系统上已经应用了哪些先前的补丁 我的项目
  • 使用 oAuth2orize 传递“资源所有者密码流”的可信客户端信息

    我在理解如何使用 oAuth2rize 和 Passport js 实现资源所有者密码流程时遇到一些问题 特别是在 client id 和 client secret 的传输方面 以便我可以对客户端进行一些检查 以确保任何内容进入此端点 使