微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 localhost 替换为 Web API 中的任何 IP 地址会导致找不到 JWTBearer客户端未经授权

如何解决将 localhost 替换为 Web API 中的任何 IP 地址会导致找不到 JWTBearer客户端未经授权

我有一些问题,我无法弄清楚可能是什么原因或如何配置它(已经失去了几个小时的谷歌搜索)。我在 .NET Core 中使用 Web API 项目。我在 JWTBearer 的 Startup.cs 中有简单的配置。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options => {
    options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetSection("AppSettings:Token").Value)),ValidateIssuer = false,ValidateAudience = false
    };
});

然后我将典型属性用于控制器“[Authorize]”等。

[Authorize]
[Route("api/[controller]")]
[ApiController]
public class PetsController : ControllerBase

当我在我的 API 的 launchsettings.json 地址中使用 localhost 时一切正常,客户端是否也是 localhost 或分配了一些 IP 地址都没有关系。如果用户登录,则浏览器控制台中没有“未授权”消息。

"API": {
  "commandName": "Project","launchbrowser": true,"launchUrl": "api/values","applicationUrl": "http://localhost:5000","environmentvariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }

但是,如果我将“localhost”替换为某个 IP,例如http://192:168.0.10:5000 ,即使用户登录浏览器也返回“未授权”。(调用正确,令牌从API获取)。我是通过 VS 启动 API 还是将其存储在 IIS 文件夹中都没有关系。本地主机工作正常,ip 不行。令牌存在于浏览器中,最重要的是 POSTMAN 中的所有调用都可以正常工作。不需要身份验证或不从 API 获取任何内容的应用程序部分也可以正常工作。 配置方法很简单:

app.UseAuthentication();
app.UseCors(o => o.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
app.UseMvc();

调试器窗口中的消息

信息:Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2] 授权失败。 信息:Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler[12] AuthenticationScheme:承载被质询。 信息:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[3] 过滤器“Microsoft.AspNetCore.Mvc.Authorization.Authorizefilter”处的请求授权失败。 信息:Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]

我请求帮助,问题可能出在哪里:D。我尝试使用一些选项(如受众、权限等)配置 AddJwtBearer 方法,但没有区别。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。