我有一个Web应用程序,该应用程序连接到SharePoint(客户租户)以创建网站和各种列表。
要访问客户的Sharepoint环境,我使用了OpenIdConnectAuthenticationOptions
,提示用户输入AAD信用凭证,然后用户要为其提供访问权限的各种选项(此应用程序和所需的各种API访问权限已在AAD中配置-允许时访问“ O365 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);
答案 0 :(得分:0)
您共享的代码段为请求授权标头设置了承载令牌,对我来说很好。
ctx.ExecutingWebRequest +=
delegate(object oSender, WebRequestEventArgs webRequestEventArgs)
{
webRequestEventArgs.WebRequestExecutor.RequestHeaders["Authorization"] =
"Bearer " + result.AccessToken; // accessToken;
};
因此,您的问题可能是令牌本身或应用程序/用户缺少某些权限。您应该检查以下几件事:
在Azure AD中注册的应用程序的必需权限。确保该应用程序具有“ Office 365 SharePoint Online”的权限。确切的权限取决于您的需求/用例,但至少应有1个。另外,您应该使用“授予权限”按钮来完成同意流程,或者作为租户入职流程的一部分。
检查已为其获取令牌的“资源”。
至少您在问题(Active Directory Dot net Webapp Multitenant)中提到的示例代码链接将资源称为"https://graph.windows.net"
。
确保已将其更改为SharePoint网站集URL。类似"https://yoursite.sharepoint.com/"
。
请尝试在此URL的末尾包含/排除/
。我也正因为如此而看到了一些问题,尽管不确定您是否与之相关。
如果以上几点都不起作用,则值得使用https://jwt.io或https://jwt.ms之类的工具检查要发送给SharePoint的访问令牌,尤其要注意:>
“音频”声明,该声明说明了为其分配令牌的目标受众。它应该是您的SharePoint URL。如果不是这样,可能会导致问题。
“ tid”声明,以查看该令牌来自正确的Azure AD租户。这将是GUID。
和其他以令牌表示的声明,以查看是否有可疑的东西冒出来。
很明显,但是,如果您使用的是委派权限,请检查用户在SharePoint网站集中是否具有适当的权限。