使用System.IdentityModel.Tokens.Jwt解码和验证JWT令牌

布莱恩

我一直在使用JWT库来解码Json Web令牌,并想切换到Microsoft的官方JWT实现System.IdentityModel.Tokens.Jwt

该文档非常稀疏,因此我很难确定如何完成对JWT库所做的工作。在JWT库中,有一个Decode方法,它采用base64编码的JWT,并将其转换为JSON,然后可以反序列化。我想使用System.IdentityModel.Tokens.Jwt做类似的事情,但是经过大量的挖掘之后,仍然无法弄清楚如何做。

对于它的价值,我正在从cookie中读取JWT令牌,以与Google的身份框架一起使用。

任何帮助,将不胜感激。

迈克·古德温

包中有一个名为的类JwtSecurityTokenHandler,它从派生System.IdentityModel.Tokens.SecurityTokenHandler在WIF中,这是反序列化和序列化安全令牌的核心类。

该类具有一个ReadToken(String)将采用base64编码的JWT字符串并返回一个SecurityToken表示JWT的方法。

SecurityTokenHandler也有ValidateToken(SecurityToken)这需要你的方法SecurityToken,并创建一个ReadOnlyCollection<ClaimsIdentity>通常对于JWT,它将包含一个ClaimsIdentity对象,该对象具有一组表示原始JWT属性的声明。

JwtSecurityTokenHandler为定义了一些附加的重载ValidateToken,特别是它有一个ClaimsPrincipal ValidateToken(JwtSecurityToken, TokenValidationParameters)重载。TokenValidationParameters参数允许您指定令牌签名证书(作为的列表X509SecurityTokens)。它还有一个重载,将JWT用作string而不是SecurityToken

执行此操作的代码相当复杂,但是可以在TokenValidationHandler位于以下位置的开发人员示例“ ADAL-REST的本机应用程序-通过浏览器对话框通过ACS进行身份验证”的Global.asax.cx代码(类)中找到该代码

http://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc

另外,JwtSecurityToken该类还具有其他不在基SecurityToken上的方法,例如,Claims无需通过ClaimsIdentity集合即可获取所包含的声明属性它还具有Payload返回一个JwtPayload对象属性,该对象使您可以获取令牌的原始JSON。这取决于您的方案,哪种方法最合适。

SecurityTokenHandler该类的常规(即非JWT特定)文档位于

http://msdn.microsoft.com/zh-CN/library/system.identitymodel.tokens.securitytokenhandler.aspx

根据您的应用程序,可以像其他任何处理程序一样将JWT处理程序配置到WIF管道中。

共有3个样本在以下不同类型的应用中使用

http://code.msdn.microsoft.com/site/search?f%5B0%5D.Type=SearchText&f%5B0%5D.Value=aal&f%5B1%5D.Type=User&f%5B1%5D.Value=Azure% 20AD%20Developer%20Experience%20Team&f%5B1%5D.Text = Azure%20AD%20Developer%20Experience%20Team

可能,一个将满足您的需求或至少能够适应它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用System.IdentityModel.Tokens.Jwt验证C#中生成的令牌

在ASP.NET 5中使用System.IdentityModel.Tokens.Jwt编码JWT令牌

如何使用System.IdentityModel.Tokens.Jwt包提取令牌到期时间

带有System.IdentityModel.Tokens.Jwt版本5.1.4的JWT令牌

使用System.IdentityModel.Tokens.Jwt使用x5c标头参数创建JWT令牌

System.IdentityModel.Tokens.SessionSecurityTokenHandler和System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler DLL在哪里

System.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens之间的冲突

IDX10501:签名验证失败。尝试使用的密钥:“ System.IdentityModel.Tokens.X509AsymmetricSecurityKey”

没有发行者的System.Identitymodel.Tokens.jwt可能吗?

System.IdentityModel.Tokens.Jwt的更新导致IdentityServer3 Client中的重大更改

在Azure上部署后无法加载文件或程序集'System.IdentityModel.Tokens.Jwt

名称空间System.IdentityModel.Tokens中不存在“ Jwt”-仅在生产中

System.IdentityModel.Tokens.JwtSecurityToken定制属性

如何使用System.IdentityModel.Tokens.Jwt使用Google OAuth2兼容算法RSA SHA-256生成JWT?

WCF:EncryptedKey子句未使用必需的加密令牌'System.IdentityModel.Tokens.X509SecurityToken'包装

.Net 6 的 System.IdentityModel.Tokens.Jwt 的自定义对象 JSON 序列化实现是否存在问题?

如何在asp.net核心中为JwtBearer和System.IdentityModel.Tokens.Jwt自定义Bearer标头关键字?

使用System.IdentityModel.Tokens.Jwt从1.1迁移到2.0后,JWTAuthentication无法在ASP.NET Core 2.0中工作-5.1.4更新

System.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens有什么区别?我应该在ASP.NET Core应用程序中使用哪一个?

无法解析类型“System.IdentityModel.Tokens.Saml2SecurityTokenHandler, System.IdentityModel”

如何使用.NET 5的IdentityModel扩展生成JWT令牌

无法从“ Microsoft.IdentityModel.Tokens.SymmetricSecurityKey”转换为“ Microsoft.IdentityModel.Tokens.SigningCredentials”

使用RSA验证JWT令牌

使用Spring和JWT进行基于令牌的身份验证

使用带有IdentityModel 4.1.1的刷新令牌的请求访问令牌

Python使用JOSE模块解码jwt令牌

如何使用 TinyGo 解码 JWT 令牌

使用访问令牌和刷新令牌的 JWT 身份验证流程

如何使用 JWT 令牌验证路由?