如何从MVc客户端发送访问令牌到api?

问题描述 投票:0回答:1

我有一个使用身份服务器4的mvc客户端应用程序,使用cookie认证。

以下是我的配置。

 services.AddAuthentication(options =>
      {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })

Http客户端方法。

public async Task<IList<MenuModel>> GetMenusNavAsync()
                    {
                        var response = await _httpClient.GetAsync("api/Menu/GetMenusNavBar");
                         response.EnsureSuccessStatusCode();
                        using var responseContent = await response.Content.ReadAsStreamAsync();
                       return await JsonSerializer.DeserializeAsync<List<MenuModel>>(responseContent);
                   }

现在我需要在http客户端发送访问令牌到api控制器。如何从身份服务器或Coockie获取访问令牌。Pls suggest...Thanks in advance

asp.net-core identityserver4
1个回答
1
投票

一旦你登录了,在MVC应用中,你可以使用 HttpContext.GetTokenAsync 扩展来获取会话中的认证令牌。这是一个标准的ASP.NET Core扩展方法,用于在 Microsoft.AspNetCore.Authentication 命名空间。

的代码会是这样的。

public async Task<IList<MenuModel>> GetMenusNavAsync()
        {
            var accessToken = await HttpContext.GetTokenAsync("access_token");

            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            var response = await _httpClient.GetAsync("api/Menu/GetMenusNavBar");
            response.EnsureSuccessStatusCode();
            using var responseContent = await response.Content.ReadAsStreamAsync();
            return await JsonSerializer.DeserializeAsync<List<MenuModel>>(responseContent);
        }

找到一个完整的例子 此处

© www.soinside.com 2019 - 2024. All rights reserved.