首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在库中应用访问令牌

在库中应用访问令牌
EN

Stack Overflow用户
提问于 2017-05-29 11:32:27
回答 1查看 1.8K关注 0票数 2

为了从Microsoft.Graph代码中访问Outlook日历REST,我尝试使用C#库。

在我的应用程序中,我试图向Outlook日历发送事件列表。在阅读了Outlook引用之后,我发现我无法在一个http请求中发送事件列表,这就是为什么我将Microsoft.Graph库连接到该项目的原因。但是,当我试图通过图形客户端访问我的日历时,我得到了一个异常,下一条消息是:ServiceException: Code: InvalidAuthenticationToken消息: CompactToken解析失败,错误代码:-2147184118

代码语言:javascript
复制
public static string clientId = ConfigurationManager.AppSettings["OutlookCalendarClientId"];
public static string clientSecret = ConfigurationManager.AppSettings["OutlookCalendarClientSecret"];
public static string redirectUri = "https://localhost:56110/appointments/calendar";
public static string scope = ConfigurationManager.AppSettings["OutlookCalendarRWScope"];
public static string accessToken = "EwAgA+l3BAAUWm1xSeJRIJK6txKjBez4GzapzqMAAUOcqDTcOceYJGraa4Q4StlEcWf9iaTwtQECi2/jBcvYwGqwrJ1mTU+ERYp0wJg1ADPAluTd5zkvv6IBxjeUzM6BtONBpFS8ZLaDjNWgNMFKOjAz61F/shGmo4Hp7MER6gYNpxhGwH0RNO0cJsRy7bE4JQWaGro83sZq2NtPBB7qg23OKdeSWVq1ardL9SNHYb4nWWRnm9GNxPGy7nVWK0ZLF7YWNS5rsY34b8MEQetMetVmU0SY7HGDIGrFzmD1YNsBbxO94UGcsoitcjnh8JIWLPflPdLPpbaZCxuoWQhVEZO2TN70SMuJOzixjQQ1tZB62gTlUmP6C36Pug2OMYUDZgAACOCpEMwEMVuu8AFrzisYPh5GC0P+u1ps2//daB+4qoxbqJU8ojACUqd7NGMiZjU1rkCpAuUjLJHMpETZsxETxIed0nA+9FQ4ALuzJmdb/iOZo1es1hil0R8MiYt1kCypfNq6+VWSS8AnKNOPq7hed7E+Zz+V559rLqusPIqMntWGwuK/6Mq4fgMEM4Em/iZ2c1yPcuI6Dqvq5wEdsqWEWS/xSXQQfbRayUZDUMNVoqpfiWTXQ6XBFpXPkZU8Q1+PcerGiGAXPbxe4WIDdmLteS8kATde5aO+RHpe3Dd3Hpqeo+nZKb4jg3ypqW9na9NnRkr+RC+BO5AxIS0CfmIdKIlR9lvRjBmscAncg/3ZH2LXUlwXeQPhp4tJltq7V8bFhAjBWH/d35CV0pUbeqcuvRLq77O1xr375NAH6aS2FHkhuC5zQ38xh7o3lKZRcmdX6Pgcf/m91EC6ktFAVrDN2DnXoFhk+mrhsF4MmiKhNU1SoTWEzBRY3d2Y1hfWAyZYBRJtYqRgNjPCX1NQvOvTuTN9jCbpPxXlrVYpJ76jflyM/CKrjpbTqKLPlF/p3B//8KIacvDK2c2IHYGK/osqlZUXX/I5bsfiNZNRm0UuwOU9xBl8Q5CydFDwmTm/mxfIw+OCCAgJd/fZ0QxI5oyBxfs8l5up+50ZuIYgGAI=";

var client = new GraphServiceClient(
      new DelegateAuthenticationProvider(
          (requestMessage) =>
          {
               requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

               return Task.FromResult(0);
          }));

          var response = client.Me.Calendar.Events.Request().GetAsync().Result;

这里提供的访问令牌是通过发送2个HTTP请求(如API引用中提到的)获得的:

代码语言:javascript
复制
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?client_id=MY_APPLICATION_ID
&scope=openid+https://outlook.office.com/calendars.readwrite
&redirect_uri=http://localhost:56110/appointments/calendar
&response_type=code

代码语言:javascript
复制
https://login.microsoftonline.com/common/oauth2/v2.0/token

最后一个请求返回了一个实际的访问令牌,我正试图与图形客户端一起使用该令牌。在这种情况下,最有趣的是,当我直接调用rest服务(例如,通过fiddler)时,我可以使用这个令牌,但是在Graph的情况下不能使用它。

现在,我试图找出为什么会有这种情况,我做错了什么,以及访问令牌应该如何表示为对Graph有效?有没有人面对这样的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-30 03:15:35

根据描述,您正在使用用于Outlook的access_token来调用Microsoft。

这是行不通的,因为观众对这两个休息是不同的。要为Microsoft获取用于读取日历的access_token,我们可以使用Calendars.Read作用域。你可以参考以下的请求:

获取授权代码:

代码语言:javascript
复制
GET:https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=code&client_id={client_id}&scope=Calendars.Read%20offline_access&redirect_uri={redirect_uri}

Get令牌:

代码语言:javascript
复制
POST:https://login.microsoftonline.com/common/oauth2/v2.0/token
client_id={client_id}&client_secret={client_secret}&grant_type=authorization_code&redirect_uri={redirect_uri}

更多关于MicrosoftGraph作用域的详细信息,请参阅下面的链接:

Microsoft图形权限引用

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44241498

复制
相关文章

相似问题

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