使用 .Net Core C# 从 Microsoft 验证 JWT

Posted

技术标签:

【中文标题】使用 .Net Core C# 从 Microsoft 验证 JWT【英文标题】:Validate JWT from Microsoft using .Net Core C# 【发布时间】:2017-06-01 18:58:16 【问题描述】:

我有一个 .Net Core 应用程序,它从 Microsoft 接收 JWT 令牌(MS 用作 OAuth 服务器)。我在 MS 端有下一个设置:

应用 ID:UUID 密码(由 MS 生成) 私钥(受我提供的密码保护)

我收到它作为字符串并转换为JwtSecurityToken,然后我看到了我的姓名、电子邮件和所有其他内容...

问题:如何检查这个令牌实际上是由 MS 为我的应用程序发出的?我很确定我必须使用ValidateToken(string token, TokenValidationParameters validationParameters, out SecurityToken validatedToken),但看起来我不能使用TokenValidationParameters 对。

【问题讨论】:

【参考方案1】:

也许我误会了你,但是如果令牌是从 MS 发出的,那么令牌应该不需要在客户端进行验证。

您应该将此令牌用作黑匣子,服务器将在客户端请求期间验证令牌。如果 MS 使用对称密钥进行签名,他们会将密钥隐藏起来,您永远无法在客户端验证令牌。使用非对称密钥,您可以进行验证,但前提是您拥有密钥的公共部分。

如果未加密,您可以使用 JWT 中的信息,但风险自负。它可能会被操纵,发出 JWT 的服务器可能会更改内部 JSON 对象的内容或结构,从签名的 JWT 更改为加密的 JWT 或将其更改为随机令牌而不会违反您的合同,所以你的应用可能不应该依赖这些内容。

【讨论】:

令牌是从 MS 发出的,但我不会用它来调用 MS 服务。我只是检查姓名/电子邮件是否正确,然后提供对我自己系统的访问权限。所以我不仅需要检查名称/密码,还要检查这个令牌是否真的来自 MS 你不是从 MS 那里收到的吗?那么它当然是有效的。否则,您可以使用它来尝试访问该 JWT 假设授予访问权限的 MS api。如果调用成功,则 JWT 有效,否则无效。我认为您正在根据错误的假设设计身份验证。正如我在回答中所描述的,您不能相信 JWT 中的内容是可访问的并且不会随着时间的推移而改变。如果您希望您的用户基于 MS 登录访问您的服务,也许您可​​以使用 MS 的 oAuth2 服务? 是的,我是从 MS 收到的,但在客户端使用 JS。我想我可以用它作为请求参数在服务器端调用我的“受保护的部分”。所以我需要检查 JWT 是否不是由不是 MS 的人发布的。也许,我需要重新考虑我所有的“重新发明的安全流程” 我也这么认为,因为您没有签名密钥,无法控制谁可以访问您的系统。祝你好运

以上是关于使用 .Net Core C# 从 Microsoft 验证 JWT的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core005EntityFramework的使用

.Net Core005EntityFramework的使用

如何使用.Net Core cookie中间件ticketdataformat将Jwt令牌从Api保存到c#中的cookie

从 .NET Core Web API 调用 SalesForce API 并将响应反序列化为 c# 对象?

如何从字节数组 c# MVC .NET Core 在 iframe 中显示 pdf

将结构数组从 C#(.NET Core) 传递到 C++(未管理)