c# - 我应该在 MSAL.NET 中使用什么类型的 ApplicationBuilder?我正在使用 ASP.NET Core Web Api

标签 c# azure asp.net-core azure-active-directory azure-ad-msal

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

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

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

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

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

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

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

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

只有 AcquireTokenSilent、AcquireTokenByAuthorizationCode、AcquireTokenOnBehalfOf 和 A​​cquireTokenForClient。但所有这些似乎都没有从 MSAL.NET 弹出登录浏览器

下面是我的示例代码:

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

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

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

最佳答案

您应该首先了解 MSAL。你有一个asp.net core web应用程序,你希望你的用户在弹出窗口中登录并生成访问 token 来调用Ms graph api,所以你需要引用this document将 azure 广告集成到您的网络应用程序中。

您在有关部署到 IIS 时出现问题的问题中提到的内容来自使用错误方法。当您使用这些代码在本地进行测试时,您的本地计算机将成为服务器,它应该可以工作,但是如果您将应用程序发布到 IIS,这意味着用户会在客户端点击您的应用程序,但弹出操作将出现在服务器端。这就是为什么它总是处于待处理状态。

综上所述,如果您需要用户登录并生成具有 delegate api 权限的访问 token ,您应该按照我上面发布的文档来实现该功能。但是如果您也可以使用应用程序权限来生成访问 token ,那么您可以去使用 graph SDK with client credential flow实现它。

关于c# - 我应该在 MSAL.NET 中使用什么类型的 ApplicationBuilder?我正在使用 ASP.NET Core Web Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70331127/

相关文章:

c# - Swagger.net 是否可以与高于 4.0 的 .Net 框架配合使用

azure - Microsoft Azure 机器学习的原名是什么?

asp.net-core - 在ASP.Net Core的startup.cs中调用 Controller

azure - 如何调试 Azure 应用服务上的启动错误

c# - SignalR OnConnected - 向连接的客户端发送消息

c# - 从线程更新表单时,表单中的空白组件

c# - 如何在 Entity Framework 中一次调用使用 UNION(concat/union)?

Azure 事件中心吞吐量

Azure DevOps 发布管道变量值未更新

c# - 在 ConfigureServices 中注册服务时会调用哪个构造函数