【发布时间】:2021-12-23 19:19:00
【问题描述】:
我有一个 .net core 3.1 web API,它是使用 JWT 身份验证构建的,它与 Angular UI 集成,并且可以按预期工作。
以下是我的 JWT 认证中间件
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
// Adding Jwt Bearer
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.IncludeErrorDetails = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = false,
ValidateAudience = false,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:Secret"]))
};
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("Token-Expired", "true");
}
return Task.CompletedTask;
}
};
});
现在我需要创建更多的 Web API 方法,这些方法将由 Angular UI 以及一些现有的计划任务(.net 控制台应用程序 将使用为内部操作创建并在后台运行的 Web api 方法。
我的 API 控制器装饰有 [Authorize] 属性。它在使用 JWT 不记名令牌实现身份验证和授权的 Angular UI 上运行良好。现在问题在于计划任务的集成,它没有获取令牌的逻辑。
在身份验证方面如何将这些控制台应用程序与 .net core web API 集成?最简单的选择(我认为)是使用类似用户名“servicetask”的用户登录名,并根据该用户名获取令牌并执行 API 操作(但这需要更多的努力,因为控制台应用程序的数量更多,还有一些来自其他项目的应用程序)。
在这种情况下有什么方法可以处理身份验证吗?
-
从控制台应用程序传递一些 API 密钥并通过 Web API 中的身份验证是一种好习惯吗?那可能吗 ?那么如何处理.net core web api中的请求呢?
-
是否可以为这些服务帐户创建任何 JWT 角色或声明并验证它们?
请帮忙。
【问题讨论】:
-
您添加了客户端应用程序的源代码,我的意思是验证令牌的源代码。你用什么发行代币?
-
几个问题,1-您使用的是身份验证提供者吗? 2-您关心登录用户的任务还是只是想确保这是您的应用程序?请记住,应用程序与您的 api 有多种行为方式,要么只是应用程序而不是用户的行为,还是用户的行为? Angular 肯定会影响用户的行为,但服务可能是机器对机器,无需记录,所有身份验证提供者都将具有端点以在机器对机器的情况下生成令牌。寻找你的答案来写一个完整的答案!!
-
观看this video 了解如何进行身份验证。该视频适用于 WebAssembly,但可以轻松转换为控制台应用程序。 WASM 应用的功能与 React 或 Angular 应用类似。
-
@khaledDehia:对于您提出的问题,1.我没有使用任何第 3 方身份验证提供程序。创建数据库用户表、令牌、角色和权限表。并使用该 2 验证用户、存储和刷新令牌。是的。只想检查请求是否仅来自预期的应用程序。
-
@A_developer 谢谢,对于您的控制台应用程序,您应该遵循机器到机器的流程,您不需要对用户(人类)的行为进行交互
标签: c# authentication asp.net-web-api jwt asp.net-core-webapi