【问题标题】:How to send access token from MVc client to api如何将访问令牌从 MVc 客户端发送到 api
【发布时间】:2020-09-05 10:15:04
【问题描述】:

我有 mvc 客户端应用程序,它使用身份服务器 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);
                   }

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

【问题讨论】:

    标签: asp.net-core identityserver4


    【解决方案1】:

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

    代码如下所示:

    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);
            }
    

    查找完整示例here

    【讨论】:

    • 谢谢..实际上我已经知道答案了.. 请告诉我如何授权在 mvc 控制器中工作?如果我只输入 [Authorize(Roles = "Administrator")] 就足够了吗?
    • 对于授权,您只需在操作上添加 [Authorize] 属性即可。但是如果你正在寻找基于角色的授权,需要先将角色声明添加到访问令牌中,here 是一个很好的帖子。
    猜你喜欢
    • 2021-08-01
    • 2019-04-23
    • 2014-07-18
    • 2011-11-12
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多