ASP Net Identity JWT API 令牌的有效负载要求是啥
Posted
技术标签:
【中文标题】ASP Net Identity JWT API 令牌的有效负载要求是啥【英文标题】:What are the payload requirements for ASP Net Identity JWT API tokensASP Net Identity JWT API 令牌的有效负载要求是什么 【发布时间】:2017-05-31 15:35:18 【问题描述】:我有一个 ASP.NET Web Api,它使用 ASP.NET Identity 来管理用户和角色对 API 的访问。我有一个案例,我试图创建一个 JWT 令牌,以便外部公司可以访问我的一个端点。我一直在尝试使用this SO article - Second answer 中显示的代码创建自己的 JWT。我的 JWT 令牌正在正确解码,但即使我分配了适当的角色,也不允许访问我的端点。我想知道有效负载中是否需要其他信息,因为该系统基于 ASP.NET Identity。
这是我的 JWT 中包含的有效负载
iss: "http://mycompany.com",
name: "Company Test",
role: "CompanyTest",
aud: "<Audience ID of my application>",
exp: 1485433642
以下是一些在我创建的 JWT 中我遗漏了的有效负载,它们包含在 ASP.NET Identity 生成的 JWT 令牌中。我想知道它们是否必不可少,因此必须包含在 JWT 的有效负载中。
"nameid": "<user unique identifier here from Identity table>",
"unique_name": "<Email account of user>",
"http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider": "ASP.NET Identity",
"AspNet.Identity.SecurityStamp": "<Security stamp column from Identity table>"
我在尝试创建自己的 JWT 令牌时忽略了这些值,因为我没有将访问权限绑定到特定帐户。我只是想创建一个持久的令牌,外部公司无需登录即可使用。
【问题讨论】:
虽然您可能正在解码 JWT,但您仍然需要将身份应用于请求的上下文。这就是图书馆为您做的事情。解码令牌提取所需的信息后,创建身份并应用声明并将原则分配给当前线程。您可以在动作过滤器中抽象出所有这些功能 我试图避免的整件事是强迫外部公司通过用户名和密码进行验证,这是我的 API 访问的正常流程。我想我可以使用凭据创建公司登录并对其进行说明,并更改发出的 JWT 的到期时间,然后使用我的密钥退出。 他们如何获得令牌 我正计划通过安全电子邮件向他们发送令牌。他们会接受它并将其放在他们对我的端点的 API 调用的标头中。 滚动您自己的安全性的问题在于,它有很多可能出错的方式。该令牌的寿命是多少?鉴于您必须创建它,然后通过电子邮件将其发送给他们,然后他们必须在令牌过期之前使用它。 【参考方案1】:我想出了问题的答案,所以我想我会在这里发布。您不需要额外的有效负载对象。原来我遇到的问题是iss:
有效载荷。我已将其设置为生产环境,但正在本地测试。更改 iss: http://localhost:12345
后,即使用户不在我的 ASP.NET 身份系统中,我也能够访问端点。
所以只是为了确认......我所需要的只是我的有效载荷中的以下数据
iss: "http://localhost:12345",
name: "Company Test",
role: "CompanyTest",
aud: "<Audience ID of my application>",
exp: 1485433642
【讨论】:
以上是关于ASP Net Identity JWT API 令牌的有效负载要求是啥的主要内容,如果未能解决你的问题,请参考以下文章
将 JWT 自动加载到 User.Identity (ASP.NET Core 3.1)
ASP.Net Core Identity JWT 基于角色的身份验证被禁止
Asp.Net Core Identity 未正确验证令牌到期 [重复]
在 ASP.NET Core 中使用基于本地存储的 JWT-Token 更改用户密码(ASP.Identity)