1

访问Microsoft Graph我正在参加暑期开发课程,并一直致力于编写一个允许用户登录到个人,工作或学校的API Microsoft.com帐户并对其日历中的事件执行基本的CRUD操作。诸如查询日期范围内的所有事件或具有指定打开扩展属性的事件等。如何从Asp.net Core 1.1 MVC

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

在决定来这里问一个问题之前,我已经做了很多挖掘工作,但我真的觉得我无处可去/浪费时间,我需要花费在开发上。由于与课程相关的原因,教授非常放手,所以向他求助并不是一种选择。

如何设置一个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中的链接中的步骤进行功能验证过程。在这一点上,我想我只是好奇,如果我原来的认证方法(几乎相同到我原来发布的链接中包含的内容)本可以发挥作用,或者无论如何我都会发现自己处于这个位置。

+0

你提到AcquireTokenSilentAsync()失败。是否会捕获异常,以便在#70行上调用AcquireTokenAsync()方法? https://github.com/microsoftgraph/uwp-csharp-snippets-rest-sample/blob/master/O365-UWP-Unified-API-Snippets/AuthenticationHelper。cs#L70 –

+0

我刚刚完成了一些更深入的研究。 'AcquireTokenSilentAsync()'不会_fail _--它在我的控制台应用程序中无法正常工作。在控制台应用程序版本中,唯一的参数是范围。当我将授权代码转移到新的asp.net核心1.1应用程序时,我发现它现在需要范围**和** IUser用户 - 并且我不知道我应该在哪里获得该用户对象来自。 编辑:没有用'AcquireTokenAsync()'方法改变。我想在理论上我可以简单地用它来代替它?不确定它是否会起作用。 – CthuluHoop

+0

_“... IUser用户 - 我不知道我应该从哪里获取该用户对象...”_ 在您的所有MVC控制器中都有一个User静态对象。你尝试过吗? – zemien

回答

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; 
相关问题