首页 > 解决方案 > 使用正确的 oauth2 凭据通过 NodeJS 使用 Passport.js 连接到 AzureDevops

问题描述

我在弄清楚我必须使用哪些确切凭据才能使用 Passport.js 通过 NodeJS 连接到 Azure Devops 时遇到问题。

我正在使用此处描述的策略:http: //www.passportjs.org/packages/passport-azure-oauth2/

在 AzureDevops 中,我在以下位置创建了一个应用程序:授权的 OAuth 应用程序,然后在那里我可以使用以下信息:

在此处输入图像描述 这是我用来创建策略的当前代码:

passport.use("azure-devops", new AzureOAuth2Strategy({
  clientID: process.env.AZURE_DEVOPS_CLIENT_ID,
  clientSecret: process.env.AZURE_DEVOPS_CLIENT_SECRET,
  callbackURL: process.env.AZURE_DEVOPS_CALLBACK_URL,
  resource: process.env.AZURE_DEVOPS_RESOURCE,
  tenant: process.env.AZURE_DEVOPS_TENANT,
  prompt: 'consent',
  state: true
},
function (accessToken, refreshtoken, params, profile, done) {
  var user = jwt.decode(params.id_token, "", true);
  done(null, user);
}));

passport.serializeUser(function(user, done) {
   done(null, user)
})
passport.deserializeUser(function(obj, done) {
   done(null, obj)
});

app.use(passport.initialize())
app.use(passport.session())

现在我不明白要在相应的凭据字段中填写哪些信息。让我特别困惑的是“租户”字段和“资源”字段。Passport.js 将这些字段描述为可选字段,但是,如果我将“租户”字段排除在外,当我使用 /auth/login 路由转到 Microsoft 登录页面时,我就会陷入循环。这意味着当我输入我的电子邮件和密码时,它会将我重定向回登录名,这是无止境的。如果我添加带有 ID 的“租户”字段(我不确定我需要使用哪个 ID)。我收到以下错误:

在此处输入图像描述

我应该在策略中的这些字段中添加什么?我在哪里可以找到这些信息???

让我感到困惑的是,在我添加了我的应用程序并转到有关添加的应用程序的仪表板之后,它说我还没有授予对任何应用程序的访问权限,尽管我之前已经添加了该应用程序......它在我的边:

在此处输入图像描述

我在这里做错了什么?

标签: node.jsazure-devopspassport.js

解决方案


Passport-azure-oauth2 策略用于对访问Azure 资源而不是Azure devops进行身份验证。此策略实际上是 Azure OAuth 2.0 客户端凭据流

如果您想使用 Oauth2 作为 azure devops 的身份验证。您应该使用 OAuth2 授权码授权流程。有关详细信息,请参阅以下文档。

使用 OAuth 2.0 授权访问 REST API。您可以查看一个示例项目。

有多种方法可以使用 Azure DevOps Services 对应用程序进行身份验证。查看此文档以获取更多示例。

至于 Passport.js,您可以查看OAuth2orize,它是 Passport 的兄弟项目,它提供了一个用于实现 OAuth 2.0 授权服务器的工具包。


推荐阅读