我一直在关注许多来源,尝试在我的 WebApi2 项目中实现 JWT 身份验证,并且还开始使用swagger.io和Swashbuckle来记录和测试我的 API。我受到了exceptionless如何支持一种/auth/login
方法来生成api_key
然后用于调用其他需要授权的方法的启发。
我还应该说我的开发基于ASP.NET Web API 2书,该书介绍了使用包的基于令牌的安全性JwtAuthForWebAPI
,因此我为我实现了 JWT 委托处理程序,如下所示:
// Add Jwt Authentication Web Handler
var builder = new SecurityTokenBuilder();
var reader = new ConfigurationReader();
GlobalConfiguration.Configuration.MessageHandlers.Add(
new JwtAuthenticationMessageHandler
{
AllowedAudience = reader.AllowedAudience,
Issuer = reader.Issuer,
SigningToken = builder.CreateFromKey(reader.SymmetricKey),
//SigningToken = builder.CreateFromKey(reader.SubjectCertificateName),
CookieNameToCheckForToken = reader.CookieNameToCheckForToken
});
(我已经设置了 web.config 凭据并且代码步骤很好)
问题是:
- 与异常不同,当我在输入 my 后调用方法时
api_key
,swagger 将密钥放在查询字符串上,而不是放在“Bearer”授权标头中 - 我不知道上面的代码是否检查了 JWT 的查询字符串(即使这样做了,由于很多原因(安全性、长 URL)听起来并不明智
- 因为上面的代码为我构建了委托处理程序,所以我无法调试它以查看它实际在做什么(我可以将log4net链接到它吗?)
- 结果,我的控制器方法不会因为
[Authorise]
失败而受到打击。
我想我此时的问题是解决上面的第 1 项,这将使 2 成为非问题并且(希望)使 4 工作!谢谢。