代码之家  ›  专栏  ›  技术社区  ›  M.M

如何在DateTimewith中获取OIDC访问令牌。净值8

  •  0
  • M.M  · 技术社区  · 11 月前

    我有一个动态队列。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 作为一种主张。

    0 回复  |  直到 11 月前
        1
  •  1
  •   Tiny Wang    11 月前

    我跟着 this case 将AAD身份验证集成到我的。Net 8 blazor web应用服务器端渲染项目。使用下面的代码,以便我们可以使用 ITokenAcquisition 生成访问令牌的服务。

    builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
        .EnableTokenAcquisitionToCallDownstreamApi()
        .AddInMemoryTokenCaches();
    

    这是我的测试结果

    @using Microsoft.Identity.Web
    @rendermode InteractiveServer
    @inject ITokenAcquisition TokenAcquisitionService
    
    @code {
        protected override async Task OnInitializedAsync()
        {
            var token = await TokenAcquisitionService.GetAccessTokenForUserAsync(new string[] { "User.Read" });
            var token2 = await TokenAcquisitionService.GetAccessTokenForUserAsync(new string[] { "api://client_id/Tiny.Greet" });
        }
    }
    

    enter image description here