.NET Core 2.0中如何从HttpContext获取AccessToken?升级遇阻求解
解决.NET Core 2.0中HttpContext.Authentication弃用后获取AccessToken的问题
嗨,我来帮你搞定这个升级里的棘手问题!在.NET Core 2.0中,HttpContext.Authentication确实被彻底移除了,官方换成了更统一的身份验证体系,咱们直接看几种实用的替换方案:
方案1:直接从请求头提取Bearer Token
这是最通用的方式——毕竟你的前端或客户端发起请求时,肯定是把AccessToken放在Authorization请求头里的:
[Authorize] public async Task<IActionResult> ClientUpdate(ClientModel client) { // 读取Authorization请求头 var authHeader = Request.Headers["Authorization"].FirstOrDefault(); if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) { // 截取掉"Bearer "前缀,拿到纯净的AccessToken var accessToken = authHeader.Substring("Bearer ".Length).Trim(); // 接下来就可以用这个accessToken调用需要Bearer认证的第三方API了 } // 你的业务逻辑代码... return Ok(); }
方案2:从用户Claims中获取(适用于官方身份验证框架场景)
如果你用的是ASP.NET Core Identity、OpenID Connect或者JWT Bearer这类官方身份验证方案,还可以把AccessToken存在用户的Claims集合里,直接从HttpContext.User中读取:
[Authorize] public async Task<IActionResult> ClientUpdate(ClientModel client) { // 从Claims中查找access_token类型的声明 var accessTokenClaim = HttpContext.User.Claims.FirstOrDefault(c => c.Type == "access_token"); if (accessTokenClaim != null) { var accessToken = accessTokenClaim.Value; // 调用第三方API逻辑... } // 业务逻辑... return Ok(); }
不过要注意,这个方式需要你在Startup.cs配置身份验证时,开启SaveTokens选项(以OpenID Connect为例):
services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddCookie() .AddOpenIdConnect(options => { options.ClientId = "你的客户端ID"; options.ClientSecret = "你的客户端密钥"; options.Authority = "你的身份提供者地址"; // 关键:开启保存Token到Claims中 options.SaveTokens = true; });
小提醒
升级到.NET Core 2.0时,除了这个身份验证的变更,还要注意中间件注册顺序(UseAuthentication必须放在UseMvc之前)、配置体系的调整这些细节,避免踩其他坑~
内容的提问来源于stack exchange,提问作者Linda Lawton - DaImTo
相关产品推荐
相关产品推荐

