首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sharepoint API无头获取访问令牌

Sharepoint API无头获取访问令牌
EN

Stack Overflow用户
提问于 2017-06-01 08:31:50
回答 1查看 1.1K关注 0票数 0

我正在编写一个称为Sharepoint-online API的集成,我的集成不是一个has应用程序,必须在没有用户在场的情况下工作。

据我所知,我需要两个设置步骤: 1.用户必须登录Azure并设置应用程序并获取客户端ID。2.我必须使用客户端ID、用户名和密码调用服务,然后才能获得访问令牌、刷新令牌和ID令牌。

两个设置步骤完成后,我可以使用访问令牌调用服务,但有时会过期,我需要使用刷新令牌来获得一个新的令牌。

第二步对我来说很奇怪。为什么没有用户界面,用户可以登录并获得Access和ID令牌?是否有人建立了一个公用事业网站,只是这样做,或我误解了什么?

谢谢罗伯特

EN

回答 1

Stack Overflow用户

发布于 2017-06-01 12:26:16

推荐的用于服务和守护进程应用程序的流是客户端凭据流(在该流程中,不涉及;客户端ID和客户端秘密用于获取最终过期的访问令牌,然后需要使用相同的客户端ID和机密获取新的访问令牌)。在SharePoint Online的情况下,为此场景提供了两个选项:

  • SharePoint Online + Azure Access Control Service (ACS)集成。 Details 这里。简而言之,您创建了一个服务主体(只添加策略),例如在站点集合级别--遵循我为此链接的博客中的"Creating“部分。然后,您需要在应用程序清单中指定应用程序所需的特定权限。请参阅“授予应用程序主体权限”部分中的示例--同样,您应该首先定义您的应用程序需要什么权限?。然后,您可以使用控制台应用程序中的服务主体:

Program.cs

代码语言:javascript
复制
            static void Main(string[] args)
        {
            Uri siteUri = new Uri("https://tenant.sharepoint.com/teams/test");
            //Get the realm for the URL
            string realm = TokenHelper.GetRealmFromTargetUrl(siteUri);

            //Get the access token for the URL.  
            //   Requires this app to be registered with the tenant
            string accessToken = TokenHelper.GetAppOnlyAccessToken(
                TokenHelper.SharePointPrincipal,
                siteUri.Authority, realm).AccessToken;

            HttpWebRequest endpointRequest =
(HttpWebRequest)HttpWebRequest.Create(
"https://tenant.sharepoint.com/teams/test/_api/web/lists/GetByTitle('Documents')/items");
            endpointRequest.Method = "GET";
            endpointRequest.Accept = "application/json;odata=verbose";

            endpointRequest.Headers.Add("Authorization", "Bearer " + accessToken);
            HttpWebResponse endpointResponse =
            (HttpWebResponse)endpointRequest.GetResponse();


        }
    }

app.config

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <appSettings>
    <add key="ClientId" value="65e674ca-3827-4134-852b-1196ff935e08"/>
    <add key="ClientSecret" value="xxxxxxx"/>
  </appSettings>
</configuration>
  • SharePoint Online + Azure Active Directory集成。 Details 这里。在该链接中,您将找到一个示例代码。第一种方法的不同之处在于,在这一种方法中,您使用的不是ACS,而是AAD。应用程序所需的权限是在AAD中定义的--据我所知,到今天为止,您可以在AAD中定义的应用程序权限并不像您可以通过ACS定义的那样细粒度--也就是说,使用ACS,您可以在站点集合级别定义一个应用程序,而使用AAD,应用程序不能具有租户范围的权限(即所有站点集合)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44302399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档