C# 从使用AzureAD身份验证的ASP.net核心Web应用程序以身份验证用户身份调用Microsoft Graph API
我有一个Asp.NET核心MVC 2.2 WebApp,它使用Azure Active Directory登录用户,配置如下:C# 从使用AzureAD身份验证的ASP.net核心Web应用程序以身份验证用户身份调用Microsoft Graph API,c#,asp.net-core,asp.net-core-mvc,azure-active-directory,microsoft-graph-api,C#,Asp.net Core,Asp.net Core Mvc,Azure Active Directory,Microsoft Graph Api,我有一个Asp.NET核心MVC 2.2 WebApp,它使用Azure Active Directory登录用户,配置如下: public void ConfigureServices(IServiceCollection services){ //... services.AddAuthentication(AzureADDefaults.AuthenticationScheme) .AddAzureAD(options => configur
public void ConfigureServices(IServiceCollection services){
//...
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => configuration.Bind("AzureAd", options));
//...
}
所有必需的信息都在appsettings.json(ClientID、TenantID、domain等)中配置,登录过程完美无误
现在,当用户在某个控制器中调用某个操作时,我想对MicrosoftGraphAPI进行一些调用。据我所知,由于我已经作为经过身份验证的AzureAD用户登录,这应该不是问题,因为我应该能够设置所需的Delgated
权限,然后使用GraphServiceClient
(来自Microsoft.Graph
库)的实例进行调用:
[HttpGet("[action]")]
public IActionResult Test()
{
GraphServiceClient graphClient = GetGraphServiceClient(); //HOW????
//... make calls etc.
return Ok("OK");
}
问题是,在在线搜索时,我完全不知道如何获取GraphServiceClient
的已验证实例。我发现了几个示例,但都使用完全不同的方法,并且通常需要几十个额外的类和支持方法。真的有那么复杂吗
所以我的问题是,在我的场景中,调用Microsoft Graph API的最佳/最简单的方法是什么?重述:
- 我需要在我的 控制器
- 当呼叫结束时,用户将始终通过身份验证 并且在AzureAD中正确设置了委托权限 控制台,所以(理论上)所需要的只是获得一个工作状态 图形客户端
有人能提供最低限度的样本吗?您可以像这样获得
GraphServiceClient
:
var accessToken = "";
var graphserviceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
(requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
return Task.FromResult(0);
}));
这是你的参考资料
更新:
这就是为什么我问是否有更直接的方法
是的,有。您可以选择适当的身份验证提供程序来创建GraphServiceClient
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
您可以像这样获得
GraphServiceClient
:
var accessToken = "";
var graphserviceClient = new GraphServiceClient(
new DelegateAuthenticationProvider(
(requestMessage) =>
{
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
return Task.FromResult(0);
}));
这是你的参考资料
更新:
这就是为什么我问是否有更直接的方法
是的,有。您可以选择适当的身份验证提供程序来创建GraphServiceClient
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
感谢您的回复,但现在问题变成了“如何获取accessToken?”。您链接的示例就是我以前使用的示例,它使用了相当多的额外类和方法(基本上您必须从Microsoft.Identity.Web导入整个源代码才能正常工作)。这就是为什么我问是否有更直接的方法。。。我想没有吧?谢谢你的支持,但这对我来说不起作用。我试过使用
OnBehalfOfProvider
(对于我的场景来说,它似乎是正确的),但是如果我尝试使用GraphServiceClient发出请求,它会在调用过程中抛出一个NullReferenceException,没有其他细节。感谢您的回复,但现在问题变成了“如何获取accessToken?”。您链接的示例就是我以前使用的示例,它使用了相当多的额外类和方法(基本上您必须从Microsoft.Identity.Web导入整个源代码才能正常工作)。这就是为什么我问是否有更直接的方法。。。我想没有吧?谢谢你的支持,但这对我来说不起作用。我已经尝试使用OnBehalfOfProvider
(对于我的场景来说,它似乎是正确的),但是如果我尝试使用GraphServiceClient发出请求,它会在调用过程中抛出NullReferenceException,没有其他细节。差不多2年后,我发现自己也在想同样的事情:与服务一起使用GraphServiceClient
的代码示例在哪里
?差不多两年后,我发现自己也在想同样的事情:在服务中使用GraphServiceClient
的代码示例在哪里?