使用正确的 oauth2 凭据使用 Passport.js 通过 NodeJS 连接到 AzureDevops

Using the correct oauth2 credentials to connect to AzureDevops through NodeJS using Passport.js

我无法弄清楚我必须使用哪些确切的凭据才能使用 Passport.js 通过 NodeJS 连接到 Azure Devops。

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

在 AzureDevops 中,我在以下位置创建了一个应用程序:Authorized OAuth Apps,然后我可以使用以下信息:

这是我用来创建策略的当前代码:

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)。 我收到以下错误:

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

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

总的来说我做错了什么?

Passport-azure-oauth2 策略用于对访问 Azure 资源 而非 Azure devops 进行身份验证。这个策略其实就是Azure OAuth 2.0 client credentials flow.

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

Authorize access to REST APIs with OAuth 2.0. There is a sample project你可以看看

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

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