如何从Asp.net Core 1.1 MVC访问Microsoft Graph

时间:2017-06-14 13:26:51

标签: c# authentication oauth-2.0 asp.net-core-mvc microsoft-graph

我正在参加夏季开发课程并且一直致力于编写一个API,允许用户登录个人,工作或学校的Microsoft.com帐户,并对他们日历中的事件进行基本的CRUD操作。查询日期范围内的所有事件或具有指定的Open Extension属性的事件等等。

完成后,我正在使用ASP.net Core 1.1 MVC为它编写前端。这里的基本目标是列出用户查询的结果以及一些细节,然后允许用户选择一个事件来查看其所有细节,编辑或删除它。将有一个单独的视图来允许创建新事件。但是,我在从基本控制台应用程序切换到ASP.net Core 1.1 MVC(来自位于here的Microsoft Graph UWP Snippets)之前使用的身份验证方法似乎不适用于ASP.net Core 1.1。具体来说,来自上面链接的第58行(AcquireTokenSilentAsync())。

在决定来这里问一个问题之前,我已经做了很多挖掘,但老实说我觉得我无处可去/浪费时间,我需要花费在开发上。由于与课程有关的原因,教授非常不干涉,因此请求他寻求帮助不是一种选择。

如何设置ASP.net Core 1.1 MVC应用程序以允许访问登录用户的日历?老实说,我找不到太多,因为我的API目前非常依赖于从上面的Authentication方法返回的令牌(它与我的API中使用的HttpClient和GraphServiceClient一起使用)我将需要很快想出来的东西。

更新:我找到了一个使用OpenIdConnect将用户登录到Asp.net MVC 6中的Microsoft.com帐户的教程,但是我不确定是否有办法获取在我需要使用Graph Client / HttpClient的身份验证令牌。另外,我还没能找到ASP.net Core 1.1 MVC的类似教程。我会继续挖掘并发布我在这里找到的任何东西。

更新2 :没有运气,已切换到尝试使用OAuth 2.0 Authorization Code Grant Flow。目前在理解如何获取授权代码以获取访问令牌时遇到一些麻烦。如果我设置responseMode=query,我是否真的必须查询我在注册我的应用程序时创建的应用程序的重定向URL(在本例中为localhost:xxxx /),或者在用户登录/同意后自动返回响应让我的应用访问他们的数据?

更新3 :按照更新2中链接中的步骤,我越来越接近正常运行的身份验证过程。此时我想我只是好奇我的原始方法是身份验证(几乎与我原始帖子中链接中包含的内容相同)可能有效,或者无论如何我都会发现自己处于这个位置。

1 个答案:

答案 0 :(得分:0)

我设法使用此示例存储库的大部分内容:Microsoft Graph Webhooks Sample for ASP.NET Core来连接到Microsoft Graph API。它演示了如何使用webhooks和MS Graph订阅,但它是如何获得对我们有用的访问令牌。

相关的代码段:

AuthenticationResult authResult = await authContext.AcquireTokenAsync(GraphResourceId, 
    new ClientCredential(AppId, AppSecret)); // For sample purposes only. Production apps should use a client certificate.
return authResult.AccessToken;