我应该在 MSAL.NET 中使用什么类型的 ApplicationBuilder?我正在使用 ASP.NET 核心网络 Api

What type of ApplicationBuilder should I use in MSAL.NET? I'm using ASP.NET Core Web Api

我想要实现的是从 MSAL.NET 弹出登录浏览器,输入用户名和密码,并使用访问令牌访问 Microsoft Graph。

现在我使用 PublicClientApplicationBuilder 执行 AcquireTokenInteractive 以通过 MSAL 弹出登录。

我正在使用 ASP.NET Core Web Api。

问题是,我在部署到 IIS 时使用 PublicClientApplicationBuilder 时遇到问题。它只是卡住并始终处于 Pending 状态。

下面是我的示例代码,在部署到 IIS 时始终处于 Pending 状态:

        var app = PublicClientApplicationBuilder.Create(clientId)
            .WithDefaultRedirectUri()
            .WithTenantId(tenantId)
            .Build();

        var result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

现在我从这里读了一篇文章:https://docs.microsoft.com/en-us/answers/questions/91715/msal-acquiretokeninteractive-code-hangs-infinte-lo.html 使用 ConfidentialClientApplicationBuilder。现在的问题是,ConfidentialClientApplicationBuilder 中没有执行从 MSAL 弹出登录浏览器,就像 AcquireTokenInteractive 一样。

只有AcquireTokenSilent、AcquireTokenByAuthorizationCode、AcquireTokenOnBehalfOf、AcquireTokenForClient。但是所有这些似乎都不会从 MSAL.NET

弹出登录浏览器

下面是我的示例代码:

        var confidentialClientApplication = ConfidentialClientApplicationBuilder
         .Create(clientId)
         .WithTenantId(tenantId)
         .WithClientSecret(clientSecret)
         .Build();

        var result = await confidentialClientApplication.AcquireTokenForClient(scopes).ExecuteAsync();

如何使用 ConfidentialClientApplicationBuilder 从 MSAL 弹出登录浏览器?

您应该首先了解 MSAL。您有一个 asp.net 核心网络应用程序,并且您希望您的用户在弹出窗口 window 中登录并生成访问令牌以调用 Ms graph api,因此您需要参考 this document 将 azure ad 集成到您的网络应用程序中。

你在having issue when deployed to IIS的问题中提到的来自使用错误方法。当您使用这些代码在您的本地端进行测试时,您的本地计算机成为服务器,它应该可以工作,但是如果您将应用程序发布到 IIS,这意味着用户会在客户端点击您的应用程序,但弹出操作将出现在服务器端。这就是为什么它总是挂起。

总结一下,如果您需要您的用户登录并生成具有委托 api 权限的访问令牌,您应该按照上面的文档 I post 来实现该功能。但是如果你也可以使用application权限来生成access token,那么你就可以去使用graph SDK with client credential flow来实现了。