我想要实现的是从 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 和 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 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/