使用 Net Core 2 进行 JWT 远程身份验证时出错
Posted
技术标签:
【中文标题】使用 Net Core 2 进行 JWT 远程身份验证时出错【英文标题】:Error in JWT Remote Authentication using NetCore 2 【发布时间】:2018-06-03 09:53:16 【问题描述】:我目前有两个不同的项目,一个是 MainAPI,它将公开我的 Web 客户端的功能,另一个是 AuthAPI,它处理所有的身份验证请求,全部使用 netcore 2 构建。
如果我直接调用 AuthAPI,它会根据需要处理请求。
当我尝试让 AuthAPI 对 MainAPI 请求进行身份验证时,它失败了,尽管我可以看到进出 AuthAPI 的请求。
这是我在 MainAPI Startup.cs 中的服务身份验证配置:
services.AddAuthentication(option =>
option.DefaultAuthenticateScheme = "Bearer")
.AddJwtBearer(options =>
options.MetadataAddress = "http://localhost:5019/auth/api/info";
options.Authority = "http://localhost:5019";
options.Audience = AUDIENCE;
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.BackchannelHttpHandler = new BackChannelHttpHandler();
options.IncludeErrorDetails = true;
);
这里是 BackChannelHttpHandler 类:
public class BackChannelHttpHandler : HttpMessageHandler
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
HttpClient client = new HttpClient(new HttpClientHandler(), disposeHandler: false);
client.DefaultRequestHeaders.Add("Accept", "application/json");
var res = await client.GetAsync(request.RequestUri);
return res;
我调用的控制器作为 Authorize 注释如下:
[Authorize(AuthenticationSchemes = "Bearer")]
至于 AuthAPI,我在 Startup.cs 中配置了 Cors:
services.AddCors(options =>
options.AddPolicy("CorsConfig",
builder => builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.Build());
);
在 AuthAPI 控制器中,我还有 [EnableCors("CorsConfig")]
注释。
我可以调用 AuthAPI 控制器,它返回一个 HTTP-200,但在我的 MainAPI 中,授权过程中的某些内容被调用取消授权,我对 MainAPI 控制器的调用永远不会被执行。
我的问题是,我在 MainAPI 身份验证过程中做错了什么,它自己对令牌进行身份验证,并使请求无效。
【问题讨论】:
您是否从 MainAPI 服务器调用 AuthAPI?通话看起来如何? 【参考方案1】:注意这个参数options.Audience; 它应该有可用的端点。
或者您可以在应用程序之间共享密钥以提高工作效率。每个端点都可以从 token 中读取 payload,但只有 auth-server 可以生成 token。
【讨论】:
据我所知,Audience 可以是任何字符串。我成功使用“用户”,包括 CORS 调用。以上是关于使用 Net Core 2 进行 JWT 远程身份验证时出错的主要内容,如果未能解决你的问题,请参考以下文章
.NET Core 2.0 和 EF 下是不是需要使用 IdentityDbContext 进行 JWT 身份验证?
ASP.NET Core API 使用 JWT 不记名令牌进行身份验证
使用 .NET Core 3.0 进行 JWT 身份验证和 Swagger
同时对 Asp.Net core 2.0 MVC 应用程序 (cookie) 和 REST API (JWT) 进行身份验证