gpt4 book ai didi

azure - 如果我们将 `DisableCustomAppAuthentication` 设置为 true,如何针对 SharePoint Online 验证我们的 .NET 控制台应用程序

转载 作者:行者123 更新时间:2023-12-04 12:54:25 27 4
gpt4 key购买 nike

我们有以下内容:-

  • 最近创建的 SharePoint 在线租户
  • Windows 服务器 2019
  • .NET 控制台应用程序,其中包含一些与 SharePoint Online 集成的代码
  • .NET 控制台应用程序使用 Windows 任务计划程序按计划运行。

现在,以前在旧租户上,我使用此方法通过传递 ClientID 和 Client Secret 来验证我的代码:-

      static void Main(string[] args)
{

string siteUrl = "https://***.sharepoint.com/sites/CustomerServiceKB/";
string clientId = "******";
string clientSecret = "*****";
using (ClientContext context = new OfficeDevPnP.Core.AuthenticationManager().GetAppOnlyAuthenticatedContext(siteUrl, clientId, clientSecret))

{

但是在我们新创建的租户上,我们无法使用上述方法对代码进行身份验证,因为我们将 DisableCustomAppAuthentication 设置为 true.. 现在我们不想修改此属性。

所以我们的问题是;如果我们将 DisableCustomAppAuthentication 设置为 true(我们不想将其设置为 false),那么我们如何验证我们的控制台应用程序?它托管在我们的 Windows 服务器内,并使用任务调度程序按计划运行?

最佳答案

因此引入了 DisableCustomAppAuthentication 属性(默认情况下设置为 true)以支持 deprecation Azure 访问控制服务 (ACS) 的一部分。对 Sharepoint 租户中的自定义应用进行身份验证的现代方法是在 Azure AD 中注册它们。

在继续之前,请考虑切换到新身份验证方案的利弊。主要是,ACS 使用户能够精细地控制应用程序身份验证的站点级权限,但 Azure AD 应用程序注册使正在运行的应用程序集对管理员透明。如果您想继续使用 ACS,只需将 DisableCustomAppAuthentication 设置为 false

现在,如果您决定继续在 Azure ID 中注册应用程序,请执行以下步骤:

  1. 登录到 Azure 门户并导航到 Azure Active Directory。

  2. 在 Azure AD 门户中注册应用程序。这是 guide关于如何去做。在应用程序概览页面获取应用程序(客户端)ID

  3. 设置所有必要的权限,confirm them作为全局管理员(或要求管理员确认)。

  4. Configure认证。选择身份验证选项:您是否希望应用程序通过加密证书或客户端 key 在 Microsoft IAM 中对自身进行身份验证。

  5. 获取您的 Azure Active Directory 租户 ID(不要与 Sharepoint Online 租户 ID 混淆)。这是how to do in in the Azure AD ;还有一个hacky way .

  6. 现在使用客户端 ID(第 2 步中的)、身份验证选项(第 4 步中的)和 AAD 租户 ID(第 5 步中的)来验证并运行您的应用程序:

      using Microsoft.Identity.Client;

    [..]

    private static async Task<string> GetToken()
    {
    string applicationId = "client-id";
    string tenantId = "aad-tenant-id";
    bool isUsingClientSecret = <true or false>;

    IConfidentialClientApplication app;

    if (isUsingClientSecret)
    {
    string secret = "secret";
    app = ConfidentialClientApplicationBuilder.Create(applicationId)
    .WithClientSecret(secret)
    .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
    .Build();
    }

    else
    {
    string certificateLocation = "certificate-file";
    X509Certificate2 certificate = ReadCertificate(certificateLocation);
    app = ConfidentialClientApplicationBuilder.Create(applicationId)
    .WithCertificate(certificate)
    .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
    .Build();
    }

    var scopes = new[] { "https://***.sharepoint.com/.default" };
    var authenticationResult = await app.AcquireTokenForClient(scopes).ExecuteAsync();
    return authenticationResult.AccessToken;
    }

    static async Task MainAsync(string[] args)
    {
    string site = "https://***.sharepoint.com/sites/CustomerServiceKB";
    string token = await GetToken();
    using (ClientContext context = new ClientContext(site))
    {
    context.ExecutingWebRequest += (s, e) =>
    {
    e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + token;
    };
    Web web = context.Web;
    context.Load(web);
    context.ExecuteQuery();
    }
    }

    static void Main(string[] args)
    {
    try
    {
    AsyncContext.Run(() => MainAsync(args));
    }
    catch (Exception ex)
    {
    Console.Error.WriteLine(ex);
    throw;
    }
    }

关于azure - 如果我们将 `DisableCustomAppAuthentication` 设置为 true,如何针对 SharePoint Online 验证我们的 .NET 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68814997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com