我有一个动态队列。NET8应用程序,具有OIDC和交互式服务器模式;配置在
Program.cs
是:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"));
builder.Services.AddControllersWithViews()
.AddMicrosoftIdentityUI();
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});
这意味着在进入任何页面之前都会进行用户身份验证。
我愿意
调用Sharepoint API
我的理解是,这需要一个访问令牌:
var request = new HttpRequestMessage(HttpMethod.Post, uploadUrl)
// ...
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
我的问题是:
我怎样才能得到
token
? 我在Razor页面中尝试了以下代码:
var authState = await ASP.GetAuthenticationStateAsync();
var token = authState.User.FindFirst(c => c.Type == "access_token")?.Value;
然而
代币
总是返回为null;为了调试,我打印了所有
Type
在索赔主体中,它们都不像访问令牌。
我也试过了
AddBearerToken()
如所述
New in .NET 8
但这并没有什么不同。
我已经查看了以下链接的页面
How to get access token claims in a Blazor Server app using OIDC?
但他们都不谈论
access_token
作为一种主张。