JwtSecurityTokenHandler 和 TokenValidationParameters
Posted
技术标签:
【中文标题】JwtSecurityTokenHandler 和 TokenValidationParameters【英文标题】:JwtSecurityTokenHandler and TokenValidationParameters 【发布时间】:2014-10-30 20:59:38 【问题描述】:我曾经引用过Microsoft.IdentityModel.Tokens.JWT
,一切正常。
我更新为使用新的System.IdentityModel.Tokens.Jwt
,但现在似乎没有任何效果。它找不到JwtSecurityTokenHandler
的ValidateToken
方法,并且TokenValidationParameters
没有AllowedAudience
、SigningToken
或ValidateExpiration
属性。
我在这里缺少什么?任何人都可以提供 JWT 验证的工作示例吗?
我的“旧”代码:
private static void ValidateJwt(string jwt)
var handler = new JWTSecurityTokenHandler();
var validationParameters = new Microsoft.IdentityModel.Tokens.JWT.TokenValidationParameters()
AllowedAudience = "https://my-rp.com",
//SigningToken = new BinarySecretSecurityToken(Convert.FromBase64String(myBase64Key)),
SigningToken = new X509SecurityToken(
X509
.LocalMachine
.My
.Thumbprint
.Find("UYTUYTVV99999999999YTYYTYTY88888888", false)
.First()),
ValidIssuer = "https://my-issuer.com/trust/issuer",
ValidateExpiration = true
;
try
var principal = handler.ValidateToken(jwt, validationParameters);
catch (Exception e)
Console.WriteLine("0\n 1", e.Message, e.StackTrace);
Console.WriteLine();
【问题讨论】:
【参考方案1】:经过大量的研究和测试,我终于发现TokenValidationParameters
的一些属性名称发生了变化,JwtSecurityTokenHandler.ValidateToken()
的方法签名也发生了变化。
所以这是上面代码的修改后的工作版本。
private static void ValidateJwt(string jwt)
var handler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters()
ValidAudience = "https://my-rp.com",
IssuerSigningTokens = new List<X509SecurityToken>() new X509SecurityToken(
X509
.LocalMachine
.My
.Thumbprint
.Find("UYTUYTVV99999999999YTYYTYTY88888888", false)
.First()) ,
ValidIssuer = "https://my-issuer.com/trust/issuer",
CertificateValidator = X509CertificateValidator.None,
RequireExpirationTime = true
;
try
SecurityToken validatedToken;
var principal = handler.ValidateToken(jwt, validationParameters, out validatedToken);
catch (Exception e)
Console.WriteLine("0\n 1", e.Message, e.StackTrace);
Console.WriteLine();
作为参考,JwtSecurityTokenHandler
位于 System.IdentityModel.Tokens
命名空间中。不要忘记添加包“JSON Web Token Handler For the Microsoft .Net Framework 4.5”(我写这些行时的版本 4.0.0)。
希望它可以为你们中的一些人节省几个小时的搜索时间!
【讨论】:
谢谢!啊,太令人沮丧了:\ 与其他框架相比,在 ASP.NET 中编码绝对是一场噩梦 @ossys 也许只是 Azure 部分?使用 ASP.NET 有一段时间了,很喜欢它。现在必须做 Azure AD 的事情,这很痛苦。 @Shelby115 很高兴您在 ASP.NET 上获得了更好的运气! :) 我认为对于 RESTful 开发 Node.js 本身就支持 JSON 格式,因此尝试管理 C# 对象和映射很困难......但是对于这个 JWT 问题,它是对 API 的更改,没有我可以找到的文档:(RequireExpirationTime
在TokenValidationParameters
的默认构造函数中设置为true
。
@ossys .NET 文档已经走下坡路。我发现很难找到有关这些课程的任何信息。太多的尝试和错误。以上是关于JwtSecurityTokenHandler 和 TokenValidationParameters的主要内容,如果未能解决你的问题,请参考以下文章
JwtSecurityTokenHandler 返回小写声明类型
如何使用 JwtSecurityTokenHandler 和 JWKS 端点验证 JWT?
JwtSecurityTokenHandler 4.0.0 重大变化?
Blazor WebAssembly - 找不到适合类型“JwtSecurityTokenHandler”的构造函数