设置多地理位置示例应用程序

在为多地理租户开发时,请务必了解安全模型。 幸运的是,用于多地理租户的模型与用于常规租户的模型相同。

本文介绍了如何配置以下示例应用程序。

使用 Graph API 读取和更新所有用户的配置文件

《在多地理位置租户中处理用户配置文件》一文中所述,读取和更新用户配置文件属性所用的首选模型是 Graph API。 本节介绍了必须向应用程序授予哪些权限,才能读取并更新整个租户范围内的用户配置文件。

可以向 Azure AD 中定义的应用程序授予很多权限,但若要控制配置文件,可以仅授予下列权限。

权限 类型 说明 需要管理员同意
User.ReadWrite.All 应用程序权限 允许应用在没有登录用户的情况下读取和写入组织中其他用户的整套个人资料属性、组成员身份、下属和经理。

还允许应用创建和删除非管理用户。

不允许重置用户密码。
Sites.ReadWrite.All 应用程序权限 允许应用在用户未登录的情况下,对所有网站集中的文档和列表项执行读取/写入操作。

仅当应用程序要检索用户的个人网站位置(例如,https://graph.microsoft.com/v1.0/users/UserB@contoso.onmicrosoft.com?$select=mySite)时,才需要此权限。

基于 Microsoft Graph 的多地理位置示例使用 Microsoft Authentication Library (MSAL) 与 v2 终结点上的 Microsoft Graph 建立连接。 与使用 v1 终结点进行连接的 ADAL 相比,MSAL 支持使用 Microsoft 帐户、Azure AD 和 Azure AD B2C 连接到 Microsoft Graph。 下面的说明有助于读者针对 v2 终结点设置应用,但也可以使用基于 v1 终结点的“旧”方法。

注册应用程序

  1. 若要对 Microsoft Graph 使用应用程序权限,请在 https://apps.dev.microsoft.com 注册应用程序。

  2. 登录后,请选择“添加应用程序”,然后选择“添加新聚合应用程序”

  3. 命名应用程序,再点击“创建应用程序”。

  4. 将显示应用程序配置屏幕。

在 Azure AD 中注册应用程序

  1. 生成新密码,并记录此密码和应用程序 ID

  2. 选择“添加平台”,然后选择“本机应用程序”作为平台目标,因为应用程序没有登陆页面。

在 Azure AD 中配置应用程序第 1 部分

  1. 添加必要的应用程序权限。 在此示例应用程序中,我们添加了 Sites.ReadWrite.All 和 User.ReadWrite.All 应用程序权限。

  2. 清除“Live SDK 支持”复选框。

在 Azure AD 中配置应用程序第 2 部分

  1. 保存所做的更改。
  1. 在此示例中,必须在租户中征得管理员许可,才能使用 User.ReadWrite.All 和 Sites.ReadWrite.All 应用权限。 创建许可 URL,如下所示:
https://login.microsoftonline.com/<tenant>/adminconsent?client_id=<clientid>&state=<something>
  1. 使用已注册应用中的客户端 ID,并许可我的租户 contoso.onmicrosoft.com 中的应用,则 URL 如下所示:
https://login.microsoftonline.com/contoso.onmicrosoft.com/adminconsent?client_id=6e4433ca-7011-4a11-85b6-1195b0114fea&state=12345
  1. 浏览到创建的 URL,以租户管理员身份登录,并许可应用程序。 你可以看到,许可屏幕上会显示应用程序名称和配置的权限范围。

Azure AD 应用程序的租户许可

使用 CSOM User Profile API 读取和更新所有用户的配置文件

若要使用 CSOM API 控制配置文件属性,只需控制已创建的自定义属性,因为可以通过 Microsoft Graph API 更好地处理现成属性。 有关详细信息,请参阅《在多地理租户中处理用户配置文件》一文。

从权限角度来看,有下列两种模式:

  • 使用用户凭据

    这就要求使用租户管理员 URL 和 SharePoint Online 管理员凭据设置 ClientContext 对象。 由于只有一个 Azure AD 实例保留用户,因此这也意味着 SharePoint Online 管理员是所有地理位置的管理员。

    string tenantAdminSiteForMyGeoLocation = "https://contoso-europe-admin.sharepoint.com";
    
    using (ClientContext cc = new ClientContext(tenantAdminSiteForMyGeoLocation))
    {
        SecureString securePassword = GetSecurePassword("password");
        cc.Credentials = new SharePointOnlineCredentials("admin@contoso.onmicrosoft.com", securePassword);
    
        // user profile logic
    }
    
    static SecureString GetSecurePassword(string Password)
    {
        SecureString sPassword = new SecureString();
        foreach (char c in Password.ToCharArray()) sPassword.AppendChar(c);
        return sPassword;
    }
    
  • 使用仅限应用主体

    如果使用仅限应用主体,必须向已创建的应用主体授予 http://sharepoint/social/tenant 权限范围的完全控制权限

下面的说明介绍了如何使用 appregnew.aspx 和 appinv.aspx 注册并许可应用主体。

创建主体

  1. 转到租户中的网站(例如 https://contoso.sharepoint.com),然后调用 appregnew.aspx 页面(例如,https://contoso.sharepoint.com/_layouts/15/appregnew.aspx)。

  2. 在此页面上,选择“生成”按钮生成客户端 ID 和客户端密码。

  3. 如下所述填写剩余字段:

  • 标题:Multi-Geo demo
  • 应用程序域:www.localhost.com
  • 重定向 URI:https://www.localhost.com

注册 ACS 应用主体

注意

请存储检索到的信息(客户端 ID 和客户端密码),因为在下一步中需要用到此类信息。

重要

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

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

向已创建的主体授予权限

下一步是向新建的主体授予权限。 因为我们正在授予租户范围的权限,所以此授予只能通过租户管理网站上的 appinv.aspx 页面上完成。

  1. 可以通过 https://contoso-admin.sharepoint.com/_layouts/15/appinv.aspx 来访问此网站。

  2. 在加载页面后,添加客户端 ID,并查找已创建的主体。

向应用主体授予权限

  1. 必须提供描述所需权限的权限 XML,才能授予权限。 由于 UI 体验扫描程序需要能够访问所有网站,且对仅限应用主体使用搜索功能,因此需要下列权限:
<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/social/tenant" Right="FullControl" />
</AppPermissionRequests>
  1. 选择“创建”后,将会看到权限许可对话框。 选择“信任它”以授予权限。

许可应用主体

在代码中使用主体

创建并许可主体后,可以使用此主体的 ID 和密码来请求获取访问权限。 TokenHelper.cs 类从应用的配置文件中捕捉 ID 和密码。

string tenantAdminSiteForMyGeoLocation = "https://contoso-europe-admin.sharepoint.com";

//Get the realm for the URL.
string realm = TokenHelper.GetRealmFromTargetUrl(siteUri);

//Get the access token for the URL.  
string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken;

//Create a client context object based on the retrieved access token.
using (ClientContext cc = TokenHelper.GetClientContextWithAccessToken(tenantAdminSiteForMyGeoLocation, accessToken))
{
    // user profile logic
}

示例 app.config 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <!-- Use AppRegNew.aspx and AppInv.aspx to register client id with proper secret -->
    <add key="ClientId" value="[Your Client ID]" />
    <add key="ClientSecret" value="[Your Client Secret]" />
  </appSettings>
</configuration>

注意

通过将 [AppForSharePointOnlineWebToolkit] () https://www.nuget.org/packages/AppForSharePointOnlineWebToolkit/ NuGet 包添加到解决方案中,可以轻松地在项目中插入 TokenHelper.cs 类。

发现多地理位置配置

仅支持使用 Graph API 在多地理位置租户中发现地理位置。 本节介绍了必须向应用授予哪些权限,才能发现多地理位置信息。

可以向 Azure AD 中定义的应用选择授予很多权限,但若要读取多地理位置租户配置信息,可以仅授予下列权限。

权限 类型 说明 需要管理员同意
Sites.ReadWrite.All 应用程序权限 允许应用在用户未登录的情况下,对所有网站集中的文档和列表项执行读取/写入操作。

请按照“读取/更新所有用户的配置文件”一节中介绍的 Azure AD 应用程序创建步骤操作。

创建和删除网站集以及设置租户网站集属性

使用 Microsoft Graph API

《多地理位置网站》一文详细介绍了如何使用 Microsoft Graph API 创建团队网站(也称为"新式"团队网站)。 在本节中,我们仅讨论权限。 下表列出了所需的权限。

权限 类型 说明 需要管理员同意
Group.ReadWrite.All 应用权限 允许应用创建组、读取并更新组成员资格以及删除组。

应用可以在没有登录用户的情况下执行所有这些操作。

请注意,并非所有组 API 都支持使用仅限应用权限进行访问。

基于 Microsoft Graph 的多地理位置示例使用 Microsoft Authentication Library (MSAL) 与 v2 终结点上的 Microsoft Graph 建立连接。 与使用 v1 终结点进行连接的 ADAL 相比,MSAL 支持使用 Microsoft 帐户、Azure AD 和 Azure AD B2C 连接到 Microsoft Graph。

请按照“读取/更新所有用户的配置文件”一节中介绍的 Azure AD 应用程序创建步骤操作。

使用 CSOM 租户 API

使用 CSOM 租户 API 与前面介绍的 CSOM 指南非常类似。实际上,有关使用用户凭据的指南完全相同。 若要使用仅限应用主体,说明是相同的,但必须授予不同的权限(租户完全控制权限):

<AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
</AppPermissionRequests>

另请参阅