如何获取 Project Online 的 ACS app-only 访问令牌
How to get an ACS app-only access token for Project Online
我正在尝试获取一个 AppOnly 访问令牌,用于我对 Project Online (SharePoint) 中的 REST 端点的请求的授权承载 header。以下是我用来检索访问令牌的代码片段。
private OAuth2AccessTokenResponse GetAccessTokenResponse()
{
var realm = TokenHelper.GetRealmFromTargetUrl([[our_site_url]]);
var resource = $"00000003-0000-0ff1-ce00-000000000000/[[our_site_authority]]@{realm}";
var formattedClientId = $"{ClientId}@{realm}";
var oauth2Request = OAuth2MessageFactory.CreateAccessTokenRequestWithClientCredentials(
formattedClientId,
ClientSecret,
resource);
oauth2Request.Resource = resource;
try
{
var client = new OAuth2S2SClient();
var stsUrl = TokenHelper.AcsMetadataParser.GetStsUrl(realm);
var response = client.Issue(stsUrl, oauth2Request) as OAuth2AccessTokenResponse;
var accessToken = response.AccessToken;
}
catch (WebException wex)
{
using (var sr = new StreamReader(wex.Response.GetResponseStream()))
{
var responseText = sr.ReadToEnd();
throw new WebException(wex.Message + " - " + responseText, wex);
}
}
}
即使我在请求中包含站点 collection 管理员凭据,我仍然收到来自服务器的 403 Forbidden 响应。有没有人有任何想法?
在与 Microsoft 建立支持票以解决这个问题后,我们最终决定不再使用应用权限来进行控制台应用程序授权。
我们的解决方法是使用服务帐户创建 SharePointOnlineCredentials 对象,然后从凭据对象获取 Auth cookie 以与我们的 WebRequest 一起传递。此解决方案来自此处找到的脚本:https://github.com/OfficeDev/Project-REST-Basic-Operations
我正在尝试获取一个 AppOnly 访问令牌,用于我对 Project Online (SharePoint) 中的 REST 端点的请求的授权承载 header。以下是我用来检索访问令牌的代码片段。
private OAuth2AccessTokenResponse GetAccessTokenResponse()
{
var realm = TokenHelper.GetRealmFromTargetUrl([[our_site_url]]);
var resource = $"00000003-0000-0ff1-ce00-000000000000/[[our_site_authority]]@{realm}";
var formattedClientId = $"{ClientId}@{realm}";
var oauth2Request = OAuth2MessageFactory.CreateAccessTokenRequestWithClientCredentials(
formattedClientId,
ClientSecret,
resource);
oauth2Request.Resource = resource;
try
{
var client = new OAuth2S2SClient();
var stsUrl = TokenHelper.AcsMetadataParser.GetStsUrl(realm);
var response = client.Issue(stsUrl, oauth2Request) as OAuth2AccessTokenResponse;
var accessToken = response.AccessToken;
}
catch (WebException wex)
{
using (var sr = new StreamReader(wex.Response.GetResponseStream()))
{
var responseText = sr.ReadToEnd();
throw new WebException(wex.Message + " - " + responseText, wex);
}
}
}
即使我在请求中包含站点 collection 管理员凭据,我仍然收到来自服务器的 403 Forbidden 响应。有没有人有任何想法?
在与 Microsoft 建立支持票以解决这个问题后,我们最终决定不再使用应用权限来进行控制台应用程序授权。
我们的解决方法是使用服务帐户创建 SharePointOnlineCredentials 对象,然后从凭据对象获取 Auth cookie 以与我们的 WebRequest 一起传递。此解决方案来自此处找到的脚本:https://github.com/OfficeDev/Project-REST-Basic-Operations