JWT 同一应用程序是身份验证服务器和应用程序服务器



嗨,专家们,我最近在OAuth以及JWT的工作原理上探索了很多。本质上应该有一个颁发令牌的AuthServer,并且应该有一个将令牌用于客户端ServiceAPI(应用程序服务器!.我还了解令牌由 3 部分组成,标头、有效负载和签名......

现在,如果我想构建一个同时执行这两项操作的 API,该怎么办......对 JWT 令牌进行身份验证和颁发 - 然后提供服务。听起来像是使用令牌的基本身份验证!!

我也不确定我编写的代码是否反映了这个概念(令牌颁发者与ServiceAPI相同(。我正在构建一个.net core 2.1 Web API。

在创业公司中.cs

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//Authentication
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.Authority = "https://localhost:44387/";
options.Audience = "JWT:Issuer";
options.TokenValidationParameters.ValidateLifetime = true;
options.TokenValidationParameters.ClockSkew = TimeSpan.FromMinutes(5);
options.RequireHttpsMetadata = false;
});
services.AddAuthorization(options =>
{
options.AddPolicy("GuidelineReader", p => {
p.RequireClaim("[url]", "GuidelineReader");
});
});
}

我还添加了一个登录控制器,它可以生成令牌并返回它......

[AllowAnonymous]
[HttpPost]
public IActionResult Login([FromBody]Application login)
{
IActionResult response = Unauthorized();
var user = AuthenticateUser(login);
if (user != null)
{
var tokenString = GenerateJSONWebToken(user);
response = Ok(new { token = tokenString });
}
return response;
}
private string GenerateJSONWebToken(Application appInfo)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(_config["Jwt:Issuer"],
_config["Jwt:Issuer"],
null,
expires: DateTime.Now.AddMinutes(120),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}

以下有什么区别

  • 选项。柄
  • 选项。受众(我认为是发送https请求的应用程序(
  • 选项。发行

选项。柄

Authority是令牌颁发身份验证服务器的地址。在您的场景中,Web api 会发出令牌,因此Authority将是 Web api 的 url。

选项。受众(我认为是发送https请求的应用程序(

Audience表示传入令牌的预期接收者或令牌授予访问权限的资源。在你的场景中,Web api 是客户端将使用 JWT 令牌访问的受保护资源,Web API 将验证令牌以检查声明/签名。所以 Web API 名称/URL 应该是Audience

选项。发行

Issuer标识构造并返回令牌的安全令牌服务 (STS(。在你的方案中,Web API 验证用户凭据和返回令牌。所以 Web API 名称/URL 是Issuer

相关内容

最新更新