这里的代码只是告诉您的应用程序您想要使用JWT令牌进行身份验证,以及使用哪些参数来验证传入的请求(使用令牌)。
您需要立即设置并终结以颁发这些令牌。。或者你说的“公钥”。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(o =>
{
o.BackchannelHttpHandler = new HttpClientHandler();
o.MetadataAddress = "http://auth-server.local.com/api";
o.Authority = "http://localhost:5000";
o.Audience = "http://localhost:5001";
o.RequireHttpsMetadata = false;
o.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = "MySecret"
ValidIssuer = "http://localhost:5000",
ValidAudience = "http://loclhost:5001"
};
})
;
现在在控制器中:
public class AccountController : Controller
{
[HttpGet]
public IActionResult getKey()
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("MySecret"));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: "http://localhost:5000",
audience: "http://localhost:5001",
expires: DateTime.Now.AddYears(10),
signingCredentials: creds);
return Json(token);
}
}
注意如何在服务。。您将私钥设置为“MySecret”-这将告诉应用程序任何与请求一起使用的令牌。。必须使用此值签名。否则它会拒绝它。
现在-只需将[Authorize]标记添加到要保护的任何函数或控制器。
[Authorize]
[HttpPost]
public IActionResult Test()
{
}
编辑:看起来你想要某种永久性的标记。只需将新JWTtoken()行中的expires字段设置为1000年后或其他时间到期,然后将其公开广播给您想要的任何人。这是一个不安全的授权模型。