Azure使用mfa将流连接到sharepoint

时间:2018-01-03 21:31:18

标签: c# azure sharepoint azure-functions

我正在尝试使用本教程:https://medium.com/plumsail/how-to-call-sharepoint-from-microsoft-flow-with-a-help-of-an-azure-function-a5740794341使用Azure Functions设置自定义MS Flow触发器来处理sharepoint文档。所以,我完全遵循了tut,并且到目前为止只更改了我的凭据。

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

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);

任何帮助非常感谢。

编辑:

1 个答案:

答案 0 :(得分:1)

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

设置服务主体凭证的说明

  1. 获取Azure CLI npm i -g azure-cli

  2. 登录Azure azure login

    这将为您提供代码并提示您访问aka.ms/devicelogin。提供代码,然后使用Azure身份登录(如果您已经登录,则可能会自动执行此操作)。然后,您就可以通过CLI访问您的帐户。

  3. 获取您的订阅和租户ID azure account show

    保存订阅和租户ID以供日后

  4. 使用
  5. 为给定的<name><password>创建服务主体并添加贡献者角色。 azure ad sp create -n <name> -p <password>

    这应该返回一个对象,该对象具有servicePrincipalNames属性和ObjectId。保存对象ID和阵列中的一个名称以及您稍后提供的密码。如果您以后需要查找服务主体,可以使用azure ad sp -c <name>,其中<name>是最初提供的名称。请注意,您提供的<name>不是您稍后提供的名称,而是servicePrincipalNames数组中的名称。

    然后使用ObjectId授予SP参与者访问权限 azure role assignment create --objectId <objectIDFromCreateStep> -o Contributor

  6. 要确保SP用户拥有所需资源的权限,请先尝试在Azure函数之外使用它。