Azure Active Directory身份验证和SharePoint CSOM

时间:2018-10-13 17:18:56

标签: azure sharepoint azure-active-directory openid csom

我有一个Web应用程序,该应用程序连接到SharePoint(客户租户)以创建网站和各种列表。

要访问客户的Sharepoint环境,我使用了OpenIdConnectAuthenticationOptions,提示用户输入AAD信用凭证,然后用户要为其提供访问权限的各种选项(此应用程序和所需的各种API访问权限已在AAD中配置-允许时访问“ O36​​5 SharePoint Online”

在AuthorizationCode上使用OpenIdConnectAutheticationOption,该代码用于获取“ AccessToken”。 使用此“ AccessToken”获取clientContext会产生错误:

  

“ 401-未经授权”

如何获取允许CSOM操作的必需令牌?

-中使用的代码 Active Directory Dot net Webapp Multitenant

在控制器OnboardingController中,Processcode函数在获取AcquireTokenByAuthorizationCodeAsync之后使用以下代码-

        string siteUrl = "https://svtestsite.sharepoint.com/sites/powerapps";
        ClientContext ctx = new ClientContext(siteUrl);
        ctx.ExecutingWebRequest +=
                     delegate(object oSender, WebRequestEventArgs webRequestEventArgs)
                     {
webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =
                                           "Bearer " + result.AccessToken; // accessToken;
               };
    ctx.Load(ctx.Web, p => p.Title);
    ctx.ExecuteQuery();
    Console.WriteLine(siteUrl);
    Console.WriteLine(ctx.Web.Title);

1 个答案:

答案 0 :(得分:0)

您共享的代码段为请求授权标头设置了承载令牌,对我来说很好。

ctx.ExecutingWebRequest += 
                         delegate(object oSender, WebRequestEventArgs webRequestEventArgs)
                         {
    webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =
                                               "Bearer " + result.AccessToken; // accessToken;
                   };

因此,您的问题可能是令牌本身或应用程序/用户缺少某些权限。您应该检查以下几件事:

  1. 在Azure AD中注册的应用程序的必需权限。确保该应用程序具有“ Office 365 SharePoint Online”的权限。确切的权限取决于您的需求/用例,但至少应有1个。另外,您应该使用“授予权限”按钮来完成同意流程,或者作为租户入职流程的一部分。

    enter image description here

  2. 检查已为其获取令牌的“资源”。

    至少您在问题(Active Directory Dot net Webapp Multitenant)中提到的示例代码链接将资源称为"https://graph.windows.net"

    确保已将其更改为SharePoint网站集URL。类似"https://yoursite.sharepoint.com/"

    请尝试在此URL的末尾包含/排除/。我也正因为如此而看到了一些问题,尽管不确定您是否与之相关。

  3. 如果以上几点都不起作用,则值得使用https://jwt.iohttps://jwt.ms之类的工具检查要发送给SharePoint的访问令牌,尤其要注意:

    “音频”声明,该声明说明了为其分配令牌的目标受众。它应该是您的SharePoint URL。如果不是这样,可能会导致问题。

    “ tid”声明,以查看该令牌来自正确的Azure AD租户。这将是GUID。

    和其他以令牌表示的声明,以查看是否有可疑的东西冒出来。

  4. 很明显,但是,如果您使用的是委派权限,请检查用户在SharePoint网站集中是否具有适当的权限。