当前位置: 首页 > 知识库问答 >
问题:

从WebAPI项目中访问GraphAPI(通过Microsoft.Identity.Web)

劳华灿
2023-03-14

我正试图从web API项目中使用Microsoft.Identity.web库对Microsoft Graph API SDK进行简单调用。

用户已经登录,正在从SPA调用受保护的控制器,一切都正常工作--但是现在,这些控件应该调用图形API,而我没有启动并运行它...

.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
   .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
   .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
   .AddInMemoryTokenCaches();

而且

MicrosoftIdentityWebChallengeUserException:IDW10502:由于对用户的质询,引发了MsalUiRequiredException。请参阅https://aka.ms/ms-id-web/ca_incremental-actority。

然后我想,好吧,由于现在这是api相关的,我将把代码从

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
                 .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
                 .EnableTokenAcquisitionToCallDownstreamApi(new string[] { "user.read" })
                 .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
                 .AddInMemoryTokenCaches();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                 .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"))
                 .EnableTokenAcquisitionToCallDownstreamApi()
                 .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
                 .AddInMemoryTokenCaches();
public async Task<string> CallGraphApiOnBehalfOfUser()
{
 string[] scopes = { "user.read" };

 // we use MSAL.NET to get a token to call the API On Behalf Of the current user
 try
 {
  string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
  dynamic me = await CallGraphApiOnBehalfOfUser(accessToken);
  return me.UserPrincipalName;
 }
 catch (MicrosoftIdentityWebChallengeUserException ex)
 {
  await _tokenAcquisition.ReplyForbiddenWithWwwAuthenticateHeaderAsync(scopes, ex.MsalUiRequiredException);
  return string.Empty;
 }
 catch (MsalUiRequiredException ex)
 {
  await _tokenAcquisition.ReplyForbiddenWithWwwAuthenticateHeaderAsync(scopes, ex);
  return string.Empty;
 }
}

当稍后找到调用下游Web API的示例Web API时,我想现在一切都变得容易了,但是尽管WebAPI调用了Microsoft Graph,但他们首先使用Windows应用程序登录用户。

在stackoverflow上,我发现了如何在SPA应用程序中从Web API访问图形API,但不幸的是,这个问题希望已经过时了。

有没有人知道如何让web应用程序的示例代码在一个仅web api的项目中运行?(不涉及windows应用程序)

Microsoft.Identity.Web版本1.4.0

共有1个答案

秦焱
2023-03-14

2.Web API现在称为Microsoft Graph,这就是您要查找的API。客户端是windows应用程序这一事实并不相关。试试看,让我知道情况如何。

 类似资料:
  • 问题内容: 可以说我有以下代码: 有没有一种方法可以以编号方式访问项目,例如: 问题答案: 如果是,则可以通过获取(key,value)对的元组的索引来轻松访问元素,如下所示 Python 3.X的注意事项 将返回一个可迭代的dict视图对象而不是一个列表。我们需要将调用包装到一个列表上,以使建立索引成为可能

  • 我想通过postman在openshift项目上创建kafka connect连接器。但是当通过邮递员发送Post命令时,出现如下错误。在openshift中将pod公开为服务(通过postman进行交互)时,我们需要运行什么特定的命令?请指教。 您看到此页面的可能原因: 主机不存在。确保正确键入了主机名,并且存在与此主机名匹配的路由。 主机存在,但没有匹配的路径。检查URL路径是否键入正确,以及

  • 我目前正在使用火花从数据库笔记本访问deltalake表。但是现在我需要从MLflow项目访问delta表。MLflow火花api只允许记录和加载SparkML模型。知道如何实现吗? 目前,我正在尝试通过MLflow项目中的此代码访问火花: 但是我得到这个错误:

  • 当我运行php artisan服务时,请复制此URLhttp://127.0.0.1:8000/.它的作品。我想通过url访问我的项目http://localhost/myproject/public/.它返回空白页。当我检查元素时,它返回500。内部服务器错误。感谢你在这方面的帮助。非常感谢。 Laravel版本:5.4 Php版本:7.1。12 我可以访问文件夹,但在访问公用文件夹本身时。返回

  • 问题内容: 我试图在把手模板内的数组中指定项的索引: 使用这个: 如果上述方法不可行,我将如何编写一个可以访问数组中特殊项目的助手? 问题答案: 尝试这个:

  • 我的Firebase数据是这样组织的: 如何通过名称检索客户? 名称保证是唯一的。 这是我的客户服务,目前: 我应该在每个findByName()调用中扫描所有客户吗? 还是应该构建一个类似“二级索引”的东西? 拜托,一些建议,我才刚刚开始...-(