托管于德国、中国或美国政府环境中的租户的授权注意事项
如果 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 更新
将静态变量 GlobalEndPointPrefix
和 AcsHostUrl
更新为德国的 Azure ACS 值。
...
private static string GlobalEndPointPrefix = "login";
private static string AcsHostUrl = "microsoftonline.de";
...
适用于中国的 Tokenhelper.cs 更新
将静态变量 GlobalEndPointPrefix
和 AcsHostUrl
更新为中国的 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);