【发布时间】:2021-08-26 20:13:28
【问题描述】:
我正在研究如何在 ASP.NET Core 3.1 Razor Pages 应用程序中使用 Microsoft Graph API。我找到了this 指南,并得到了大部分工作(以及检索令牌),直到我意识到我需要在没有用户的情况下访问 API。
目前,我被卡住了,因为我无法使用 ITokenAcquisition GetAccessTokenForAppAsync 方法检索令牌。它不断导致NullReferenceException。我不知道我的启动设置是否错误或什么,但我无法弄清楚。
System.NullReferenceException: 'Object reference not set to an instance of an object.'
我知道Get access without a user 指南,我理解并且可以开始工作,但我特别想使用GetAccessTokenForAppAsync 方法,因为它会为我管理刷新令牌。否则,我必须在每次 API 调用中不断查询新令牌,并且不断生成有效令牌似乎是个坏主意。
Startup.cs ConfigureServices 方法:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHttpClient();
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
// Use in-memory token cache
// See https://github.com/AzureAD/microsoft-identity-web/wiki/token-cache-serialization
.AddInMemoryTokenCaches();
...
}
索引.cshtml.cs。这是我打电话获取令牌的地方:
public class IndexModel : PageModel
{
private readonly IHttpClientFactory _clientFactory;
private readonly ITokenAcquisition _tokenAcquisition;
public IndexModel(IHttpClientFactory clientFactory, ITokenAcquisition tokenAcquisition)
{
_clientFactory = clientFactory;
_tokenAcquisition = tokenAcquisition;
}
public async Task OnGet()
{
// results in NullReferenceException
string token = await _tokenAcquisition.GetAccessTokenForAppAsync("https://graph.microsoft.com/.default", tenant:"tenantId");
}
}
appSettings.json。这些值由用户机密 json 填充。
{
"AzureAd": {
"Instance": "",
"ClientId": "",
"TenantId": "",
"CallbackPath": "",
"ClientSecret": "",
"TimeoutInMinutes": ""
},
"ConnectionStrings": {
"DefaultConnection": ""
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
【问题讨论】:
-
您好兄弟,您尝试过更新的解决方案吗?如果还有什么可以帮助您的,请告诉我。
标签: c# asp.net-core microsoft-graph-api bearer-token