【问题标题】:Authenticate our .NET console application against SharePoint online if we have `DisableCustomAppAuthentication` set to true如果我们将 `DisableCustomAppAuthentication` 设置为 true,则针对 SharePoint Online 验证我们的 .NET 控制台应用程序
【发布时间】:2021-10-05 05:33:12
【问题描述】:

我们有以下:-

  • 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 服务器中,哪个使用任务调度程序按计划运行?

现在我读到了这种在 azure AD @https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread 中使用注册应用程序在 Azure AD 中注册新应用程序的方法。但是当我点击注册一个新应用程序时,我收到了这条消息:-

所以这让我担心我会采用一种已经被弃用的方法......那么,我们应该采用哪种最新方法来使用 SharePoint Online 对我们的控制台应用程序中的 CSOM 代码进行身份验证?

【问题讨论】:

    标签: azure azure-active-directory sharepoint-online msal adal


    【解决方案1】:

    是的,同意。默认情况下,DisableCustomAppAuthentication 设置为 True,这将影响 2020 年 8 月下旬某个时间之后配置的所有租户 这将破坏许多自定义功能,例如适用于任何旧租户的应用程序或 PowerShell 脚本。

    选项:

    1. 摆脱使用客户端 ID 和客户端密码的旧的、仅限应用的身份验证

    这将是更好的前进方式 - 对于应用程序身份验证方案,您需要在 Azure Active Directory 中注册您的应用程序,但在这种情况下,您根本无法精细地管理权限。

    1. 很遗憾,下一个选项是设置为 False。

    将属性 DisableCustomAppAuthentication 设置为 false。 您还可以通过禁用租户属性“DisableCustomAppAuthentication”来启用自定义应用身份验证。

    您至少需要拥有 SharePoint 管理员权限才能运行此程序。

    首先,将您的 SharePoint Online PowerShell 模块更新到最新版本。之后,进行身份验证,然后在下面运行:

    Set-SPOTenant -DisableCustomAppAuthentication $false

    或者,您也可以运行此 PnP 命令行开关:

    Set-PnPTenant -DisableCustomAppAuthentication $false

    AAD 中的应用注册不会被弃用。发布的 ADAL 库将在 2022 年 6 月 30 日结束支持。因此这不会影响在 Azure AD 中创建应用程序 ID。

    现在,当您在 App Registration 中注册新应用程序时,您会看到现在添加了 MS Graph 权限,而不是 Azure AD Graph 权限。当您更新现有应用程序以使用 MS Graph 权限时,您需要再次为应用程序提供同意,因为应用程序的权限正在更改。此外,您只需对已在租户中注册的应用程序执行此操作,即您已发布的单租户应用程序和多租户应用程序。

    Microsoft 将对 Microsoft 应用程序进行更新,您无需对 Microsoft 拥有的应用程序执行任何特定操作。我们可以编写脚本将相同的权限集从 Azure AD Graph 映射到 MS Graph 权限,但在这种情况下,您还需要再次同意这些应用。

    很快,MS 将显示在您的租户中使用 Azure AD Graph 权限的应用程序列表。然后事情就会变得简单,因为您可以直接对其采取行动。

    参考:https://www.koskila.net/literally-breaking-changes-to-app-authentication-on-sharepoint-%F0%9F%98%B5/

    【讨论】:

    • 所以对于身份验证我应该使用PnP.Framework.AuthenticationManager 还是ConfidentialClientApplicationBuilder
    • 但似乎 PnP.Framework.authntictionManager nuget 包已被弃用,请检查此链接@@nuget.org/packages/SharePointPnPCoreOnline !!
    • 所以您不知道您提到的使用PnP.Framework.AuthenticationManager(clientId, certificatePath, password, "tenant.onmicrosoft.com").GetContext(site); 的方法已被弃用?
    • 你能提供更多建议吗?
    • 许多项目已经使用了 Nuget 包,使用起来并没有什么坏处,但是它现在已经过时了(不推荐)。还有一些限制,比如 SharePointPnPCoreOnline 不能在 .NetCore 框架中使用。仅使用 2 个选项编辑了我的答案 - 包括仅应用程序身份验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2010-09-15
    相关资源
    最近更新 更多