托管于德国、中国或美国政府环境中的租户的授权注意事项

如果 Office 365 租户托管于特定环境中(如德国、中国或美国政府环境),则你需要在根据租户进行开发工作时考虑到这一点。

适用于:托管于德国、中国或美国政府环境中的 Office 365

重要

自 2023 年 11 月 27 日起,已停用 Azure ACS (访问控制 Services for SharePoint Online) ,请查看完整的停用公告以了解详细信息。 在 SharePoint 上下文之外使用 Azure ACS 已于 2018 年 11 月 7 日停用,现已停用。

停用意味着该功能不会获得任何新投资,但仍受支持。 生命周期结束意味着该功能将停用,不再可供使用。

简介

Microsoft 在德国、中国和美国政府环境中具有特定的 Office 365 部署,以满足这些领域的具体规定。 以下链接提供了更多的上下文:

如果你是为托管于这些环境中的 SharePoint Online 开发应用程序的开发人员,那么你需要考虑到这些环境都有其自己专用的 Azure AD 身份验证终结点,而作为开发人员,你需要使用这些终结点。 以下章节解释如何将这些专用终结点用于典型的 SharePoint Online 自定义选项。

使用 Azure AD 进行授权

Azure AD 终结点

Azure AD 应用程序需要进行授权时,它需要使用正确的终结点。 下表说明了要使用的终结点,具体取决于定义 Azure AD 应用程序的位置:

环境 终结点
生产 https://login.windows.net
德国 https://login.microsoftonline.de
中国 https://login.chinacloudapi.cn
美国政府 https://login.microsoftonline.us

使用 PnP 来授权 Azure AD 使用权限

通过 PnP AuthenticationManager,可以在使用 Azure AD 应用时,轻松获取 SharePoint ClientContext 对象。 受影响的方法已通过可选 AzureEnvironment 枚举扩展。

/// <summary>
/// Enum to identify the supported Office 365 hosting environments
/// </summary>
public enum AzureEnvironment
{
    Production=0,
    PPE=1,
    China=2,
    Germany=3,
    USGovernment=4
}

下面的代码片段展示了仅限应用授权(请注意 GetAzureADAppOnlyAuthenticatedContext 方法中的最后一个参数):

string siteUrl = "https://contoso.sharepoint.de/sites/test";
string aadAppId = "079d8797-cebc-4cda-a3e0-xxxx"; 
string pfxPassword = "my password";
ClientContext cc = new AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(siteUrl, 
			aadAppId, "contoso.onmicrosoft.de", @"C:\contoso.pfx", pfxPassword, AzureEnvironment.Germany);

另一个代码片段使用 GetAzureADNativeApplicationAuthenticatedContext 方法显示交互式用户登录:

string siteUrl = "https://contoso.sharepoint.de/sites/test";
string aadAppId = "ff76a9f4-430b-4ee4-8602-xxxx"; 
ClientContext cc = new AuthenticationManager().GetAzureADNativeApplicationAuthenticatedContext(siteUrl, 
			aadAppId, "https://contoso.com/test", environment: AzureEnvironment.Germany);

使用 Azure ACS 对 SharePoint 外接程序进行授权

创建 SharePoint 外接程序时,通常对它们实施低信任授权,具体取决于 Azure ACS,如创建使用低信任授权的 SharePoint 外接程序中所述。

Azure ACS 终结点

环境 终结点前缀 终结点
生产 accounts accesscontrol.windows.net
德国 login microsoftonline.de
中国 accounts accesscontrol.chinacloudapi.cn
美国政府 accounts accesscontrol.windows.net

使用此模型的话,要使用的 ACS 终结点 URL 的格式为 https://+ 终结点前缀 +/+ 终结点。 因此,生产的 URL 将为 https://accounts.accesscontrol.windows.net,德国的 URL 将为 https://login.microsoftonline.de

更新应用程序中的 tokenhelper.cs

希望使用 Azure ACS 执行 SharePoint 外接程序授权时,则使用 tokenhelper.cs(或 tokenhelper.vb)。 默认 tokenhelper 类将具有对 Azure ACS 终结点的硬编码引用和获取 ACS 终结点的方法,如下所示:

...

private static string GlobalEndPointPrefix = "accounts";
private static string AcsHostUrl = "accesscontrol.windows.net";

...

适用于德国的 Tokenhelper.cs 更新

将静态变量 GlobalEndPointPrefixAcsHostUrl 更新为德国的 Azure ACS 值。

...

private static string GlobalEndPointPrefix = "login";
private static string AcsHostUrl = "microsoftonline.de";

...

适用于中国的 Tokenhelper.cs 更新

将静态变量 GlobalEndPointPrefixAcsHostUrl 更新为中国的 Azure ACS 值:

...

private static string GlobalEndPointPrefix = "accounts";
private static string AcsHostUrl = "accesscontrol.chinacloudapi.cn";

...

使用 PnP 对使用 Azure ACS 的外接程序进行授权

通过 PnP AuthenticationManager,可以在使用 Azure ACS 进行授权时,轻松获取 SharePoint ClientContext 对象。 受影响的方法已通过可选 AzureEnvironment 枚举扩展。

/// <summary>
/// Enum to identify the supported Office 365 hosting environments
/// </summary>
public enum AzureEnvironment
{
    Production=0,
    PPE=1,
    China=2,
    Germany=3,
    USGovernment=4
}

下面的代码片段展示了仅限应用授权(请注意 GetAppOnlyAuthenticatedContext 方法中的最后一个参数):

string siteUrl = "https://contoso.sharepoint.de/sites/test";
string acsAppId = "955c10f2-7072-47f8-8bc1-xxxxx"; 
string acsAppSecret = "jgTolmGXU9DW8hUKgletoxxxxx"; 
ClientContext cc = new AuthenticationManager().GetAppOnlyAuthenticatedContext(siteUrl, acsAppId, 
				acsAppSecret, AzureEnvironment.Germany);

另请参阅