【问题标题】:Azure Web Application - how to use both delegated and Application permissionsAzure Web 应用程序 - 如何同时使用委派权限和应用程序权限
【发布时间】:2022-01-04 16:57:39
【问题描述】:

背景信息。

我希望我的 ASP.NET Web 应用程序使用 MS Identity 平台对用户进行身份验证...并允许他们查看自己的个人资料。 我的这部分代码正在工作。我还有一个功能,允许最终用户从他们的本地计算机中选择一个文件,并通过 MS Graph 的上传会话上传到 SP。这也是目前的工作

我在 Azure 应用程序注册的“API 权限”下的安全配置如下:

  • Sites.ReadWrite.All->委托
  • User.Read->委托

但现在我想让应用程序本身进行文件上传。所以我将安全设置更改为如下所示:

  • Sites.ReadWrite.All->应用程序
  • User.Read->委托

当我尝试上传时,我收到拒绝访问的错误消息

我还为应用程序添加了“Files.ReadWrite.All”,但这也不起作用。 有人可以指出我正确的方向吗?我必须为要上传的应用程序创建一个单独的 graphClient 吗?

编辑 1

我想知道这是否相关:

https://docs.microsoft.com/en-us/answers/questions/354161/sitesselected-accessdenied-when-uploading-files.html

有谁知道他说的OP是什么意思

我们的应用程序已注册为可以访问目标网站集 具有权限角色“WRITE”

或者一个更好的问题是你如何做到这一点?

【问题讨论】:

  • 您是否尝试过重置应用许可(在“企业应用程序”中)?我的意思是,删除“企业应用程序”中的应用程序,然后重新添加它。注意 - 这与应用程序注册不同。也许旧的同意卡在某个地方。或者只是检查您的应用授予的同意是什么(在 azure 门户中)

标签: c# asp.net-core microsoft-graph-api sharepoint-online


【解决方案1】:

为您的天蓝色广告应用分配应用类型api权限后,您需要使用ClientCredentialFlow生成访问令牌并使用它来调用api。

然后你可以使用访问令牌直接发送http请求。这是一个部门的一部分,所以它应该在你的场景中工作。

using Azure.Identity;
using Microsoft.Identity.Client;    

IConfidentialClientApplication app;
app = ConfidentialClientApplicationBuilder.Create("azure_ad_app_client_id")
                        .WithClientSecret("client_secret")
                        .WithAuthority(new Uri("https://login.microsoftonline.com/your_tanent_name.onmicrosoft.com"))
                        .Build();
AuthenticationResult result = null;
string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
result = await app.AcquireTokenForClient(scopes)
                        .ExecuteAsync();
string accesstoken = result.AccessToken;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2022-07-20
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多