【发布时间】:2018-09-10 23:09:09
【问题描述】:
我开发了一个具有以下主要特征的 .net 控制台应用程序:-
- 与 SharePoint online REST API 集成,以检索一些列表项,并修改项目字段。
- 例如每天凌晨 1 点运行。
- 我将在 Azure Function 应用程序中托管此控制台应用程序。
- Azure 帐户对 sharepoint 租户没有任何权限,因为 Azure 帐户和 sharepoint online 位于不同的域中。
所以我不确定控制台应用程序将在哪个帐户下运行?
- 它会在当前 Azure 帐户下运行吗?如果是这种情况,那么这将不起作用,因为 azure 帐户位于不同的域上并且对共享点没有任何权限(它不应该有)?
或
- 我可以为 Azure 函数应用定义一个服务帐户以在其下运行,在这种情况下,我可以将服务帐户定义为在线共享点内的授权帐户?
或
- 我需要在控制台应用程序中定义用户名/密码吗?我不喜欢接近,因为我将在控制台应用程序中公开密码。还要更改用户名的密码,这意味着我们需要相应地更新控制台应用程序..
请问有人可以就此提出建议吗? 谢谢
编辑
用于管理控制台应用程序身份验证的代码:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Client;
namespace O365SPProject
{
class Program
{
private class Configuration
{
public static string ServiceSiteUrl = "https://<tenant>.sharepoint.com";
public static string ServiceUserName = "<user>@<tenant>.onmicrosoft.com";
public static string ServicePassword = "xxxxxxxxxx";
}
static ClientContext GetonlineContext()
{
var securePassword = new SecureString();
foreach (char c in Configuration.ServicePassword)
{
securePassword.AppendChar(c);
}
var onlineCredentials = new SharePointOnlineCredentials(Configuration.ServiceUserName, securePassword);
var context = new ClientContext(Configuration.ServiceSiteUrl);
context.Credentials = onlineCredentials;
return context;
}
static void Main(string[] args)
{
var ClientContext=GetonlineContext();
Web web = clientContext.Web;
// do somethings
}
}
}
【问题讨论】:
-
嗨,john,您可以参考以下链接:sharepoint.stackexchange.com/questions/83985/…
-
@YukiLou-MSFT 感谢您的链接。但似乎我没有正确解释我的问题。现在我很清楚我可以在我的控制台应用程序中定义身份验证,主要是在
ClientContext()中。但我要问的是避免在控制台应用程序本身中定义用户名和密码,以及是否可以定义服务帐户(类似于我们在 Windows 任务调度程序中对任务进行身份验证的方式)+我默认情况下询问的是哪个帐户 Azure 功能将运行?在 azure 帐户用户名下? -
您的 Sharepoint Online 是否链接到您的 Azure AD ????
-
@Thomas 是的,它是一个连接到 Azure AD 的在线共享点。但是这有什么重要性?
-
作为 MSI 的替代方案,在 Azure AD 中显式注册的应用程序可用于标识目的。有一个很好的博客系列描述了详细的步骤。它值得一看,但有一些微软已经指出的限制。我已编辑答案以包含此选项并将其与其他选项进行比较。
标签: azure sharepoint office365 azure-functions