C# Azure功能使用mfa将流连接到sharepoint

C# Azure功能使用mfa将流连接到sharepoint,c#,azure,sharepoint,azure-functions,C#,Azure,Sharepoint,Azure Functions,我正在尝试使用本教程:使用Azure函数设置自定义MS流触发器来处理sharepoint文档。所以,我严格遵守了图坦卡蒙的规定,到目前为止只更改了我的证件 我得到以下错误告诉我,该帐户未经授权,我必须首先浏览到该网站,并启用自动登录 2018-01-03T21:11:01.889 Exception while executing function: Functions.CreateFolder. Microsoft.Azure.WebJobs.Script: One or more error

我正在尝试使用本教程:使用Azure函数设置自定义MS流触发器来处理sharepoint文档。所以,我严格遵守了图坦卡蒙的规定,到目前为止只更改了我的证件

我得到以下错误告诉我,该帐户未经授权,我必须首先浏览到该网站,并启用自动登录

2018-01-03T21:11:01.889 Exception while executing function: Functions.CreateFolder. Microsoft.Azure.WebJobs.Script: One or more errors occurred. Microsoft.SharePoint.Client.Runtime: Cannot contact web site 'https://mysite.sharepoint.com/' or the web site does not support SharePoint Online credentials. The response status code is 'Unauthorized'. The response headers are 'X-SharePointHealthScore=0, X-MSDAVEXT_Error=917656; Access+denied.+Before+opening+files+in+this+location%2c+you+must+first+browse+to+the+web+site+and+select+the+option+to+login+automatically., SPRequestGuid=9c003d9e-9090-5000-1519-82d69fd4d838, request-id=9c003d9e-9090-5000-1519-82d69fd4d838, MS-CV=nj0AnJCQAFAVGYLWn9TYOA.0, Strict-Transport-Security=max-age=31536000, X-FRAME-OPTIONS=SAMEORIGIN, SPRequestDuration=29, SPIisLatency=0, MicrosoftSharePointTeamServices=16.0.0.7206, X-Content-Type-Options=nosniff, X-MS-InvokeApp=1; RequireReadOnly, Content-Length=0, Content-Type=text/plain; charset=utf-8, Date=Wed, 03 Jan 2018 21:11:01 GMT, P3P=CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI", Server=Microsoft-IIS/8.5, X-Powered-By=ASP.NET'.
我不太清楚它们到底是什么意思,但不管怎样,我的登录需要mfa。以前是否有人尝试过这样做,在使用mfa时我是否需要做一些特殊的事情?下面是进行客户端连接的几行代码

string userName = System.Environment.GetEnvironmentVariable("SharePointUser", EnvironmentVariableTarget.Process);
string password = System.Environment.GetEnvironmentVariable("SharePointPassword", EnvironmentVariableTarget.Process);

var authenticationManager = new PnPAuthenticationManager();
var clientContext = authenticationManager.GetSharePointOnlineAuthenticatedContextTenant(sharePointSiteUrl, userName, password);
var pnpClientContext = PnPClientContext.ConvertFrom(clientContext);
非常感谢您的帮助


编辑:

使用ServicePrincipalUser是自动化工具的最佳方式。H

设置服务主体凭据的说明

  • 获取Azure CLI
    
    npm i-g azure cli
    

  • 登录Azure
    
    azure登录
    

    这将为您提供一个代码并提示您访问。提供代码,然后使用您的Azure身份登录(如果您已经登录,这可能会自动发生)。然后,您将能够通过CLI访问您的帐户

  • 获取您的订阅和租户id
    
    azure帐户显示
    

    保存子描述和租户id以备将来使用

  • 为给定的
    创建服务主体,并添加参与者角色。
    
    azure ad sp创建-n-p
    

    这将返回一个对象,该对象上有
    servicePrincipalNames
    属性和一个ObjectId。保存对象Id和数组中的一个名称以及稍后提供的密码。如果以后需要查找服务负责人,可以使用
    azure ad sp-c
    ,其中
    是最初提供的名称。请注意,您提供的
    不是稍后提供的名称,而是
    servicePrincipalNames
    数组中的名称

    然后使用ObjectId授予SP参与者访问权限
    
    azure角色分配创建--objectId-o Contributor
    


  • 要确保SP user对您所需的资源具有正确的权限,请先尝试在Azure功能之外使用它。

    我认为问题在于MFA。如果有适当的权限,sharepoint中是否存在可用于自动化工具的等效软件?我们使用AD来管理帐户,因此我尝试创建SP用户,然后将该应用程序id和secret与几个auth manager方法一起使用。我通过广告->应用注册->所需任务授予应用Sharepoint权限。我还尝试使用应用程序注册来授予包含我的功能和所有内容的资源组权限,使用应用程序id/密码,使用应用程序密码。我现在被禁止,而不是未经授权,所以我想这是一个许可问题,但不知道我还能做什么。您曾经做过类似的事情吗?使用ServicePrincipalUser是自动化工具的最佳方式。我建议首先尝试在Azure功能之外使用SP凭据,以确保获得正确的权限。下面是一个在资源组中拥有正确权限的示例。希望这有帮助。得到它与sp用户一起工作,谢谢你的信息!伟大的我将开始回答。