Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何将访问令牌从MVc客户端发送到api_Asp.net Core_Identityserver4 - Fatal编程技术网

Asp.net core 如何将访问令牌从MVc客户端发送到api

Asp.net core 如何将访问令牌从MVc客户端发送到api,asp.net-core,identityserver4,Asp.net Core,Identityserver4,我有一个mvc客户端应用程序,它使用identity server 4,使用cookie身份验证 以下是我的配置: services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConn

我有一个mvc客户端应用程序,它使用identity server 4,使用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);
                   }
public异步任务GetMenusNavAsync()
{
var response=wait_httpClient.GetAsync(“api/Menu/GetMenusNavBar”);
response.EnsureSuccessStatusCode();
使用var responseContent=await response.Content.ReadAsStreamAsync();
返回等待JsonSerializer.DeserializeAsync(responseContent);
}

现在我需要将访问令牌发送到http客户端内的api控制器。如何从Identity server或Coockie获取访问令牌。请建议..提前感谢

登录MVC应用后,您可以使用
HttpContext.GetTokenAsync
扩展在会话中获取身份验证令牌。这是
Microsoft.AspNetCore.Authentication
命名空间上的标准ASP.NET核心扩展方法

代码如下所示:

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);
        }
public异步任务GetMenusNavAsync()
{
var accessToken=await HttpContext.GetTokenAsync(“访问令牌”);
_httpClient.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,accessToken);
var response=wait_httpClient.GetAsync(“api/Menu/GetMenusNavBar”);
response.EnsureSuccessStatusCode();
使用var responseContent=await response.Content.ReadAsStreamAsync();
返回等待JsonSerializer.DeserializeAsync(responseContent);
}

找到一个完整的样本

谢谢..实际上我已经找到答案了。。请让我知道如何在mvc控制器中进行授权?如果我只添加[Authorize(Roles=“Administrator”)]就足够了?对于授权,您只需在操作上添加[Authorize]属性即可。但是,如果您正在寻找基于角色的授权,那么首先需要将角色声明添加到访问令牌中,这是一篇很好的文章。