javascript - 如何使用 passport-azure-ad (/w vue-msal) 保护 Web API
问题描述
我想用 passport-azure-ad 保护 Web API 并使用 BearerStrategy。我遵循模块提供的示例并传递元数据和clientId,我总是得到401未经授权。
这是我的 passport-azure-ad 配置
{
identityMetadata: 'https://login.microsoftonline.com/<your_tenant_guid>/v2.0/.well-known/openid-configuration'
// Required
clientID: '<client ID>',
// Required.
// If you are using the common endpoint, you should either set `validateIssuer` to false, or provide a value for `issuer`.
validateIssuer: false,
// Required.
// Set to true if you use `function(req, token, done)` as the verify callback.
// Set to false if you use `function(req, token)` as the verify callback.
passReqToCallback: false,
// Optional. Default value is false.
// Set to true if you accept access_token whose `aud` claim contains multiple values.
allowMultiAudiencesInToken: false,
loggingLevel:'error',
};
}
我为授权请求标头提供了由 vue-msal 生成的访问令牌。
我还检查了访问令牌的签名也无效。
此外,我使用了 ID 令牌,但仍然 401 未经授权。
在门户 /AAD /App 注册中,我已经启用了两个隐式授权流程、<code>accessTokenAcceptedVersion: 2、在 API 权限中为我的订阅授予管理员同意
我还错过了什么?
解决方案
在您的情况下,您可以遵循此Use passport.authenticate
to protection resources or APIs,并确保在使用 vue-msal 获取令牌时使用正确的范围。
server.get('/api/tasks', passport.authenticate('oauth-bearer', { session: false }), listTasks);
推荐阅读
- java - 如何测试返回 Mono 的函数
其中有另一个 Mono 在使用 Reactor 的 StepVerifier - r - 数据框中的字长操作
- visual-studio - 重命名 SSRS 报告而不更改物理名称
- amazon-web-services - 如何使用 Ansible 在 AWS 机密管理器中设置键/值机密?
- node.js - 安装反应依赖项的问题
- selenium - 我们可以使用 TestNG xml 在一次运行中执行来自不同 maven 项目的测试吗
- sql - PostgreSQL 排序,数字最后
- python - 在不同对象中散景多个实时流图/位于其他类中的寄存器更新例程
- google-apps-script - 如何使用显示草稿并将电子邮件发送到容器绑定项目的库?
- arrays - 将元素从数组复制到另一个保留嵌入空间