ASP Net Identity JWT API令牌的有效负载要求是什么

时间:2017-01-16 18:03:56

标签: asp.net-web-api2 jwt asp.net-identity-2

我有一个ASP.NET Web Api,它使用ASP.NET Identity来管理对API的用户和角色访问。我有一个案例,我正在尝试创建一个JWT令牌,以便外部公司可以到达我的一个端点。我一直在尝试使用this SO article - Second answer中显示的代码创建自己的JWT。我的JWT令牌正在正确解码,但即使我已分配了适当的角色,也不允许访问我的端点。我想知道有效负载中是否还需要其他信息,因为系统基于ASP.NET身份。

以下是我在JWT

中包含的有效负载
{
  iss: "http://mycompany.com",
  name: "Company Test",
  role: "CompanyTest",
  aud: "<Audience ID of my application>",
  exp: 1485433642
}

以下是我的JWT创建我遗漏的一些有效负载,这些有效负载包含在ASP.NET身份生成的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令牌时遗漏了这些值,因为我没有将访问权限绑定到特定帐户。我只是想创建一个持久的令牌,外部公司可以使用而无需登录。

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案,所以我想我会在这里发布。您不需要额外的有效负载对象。原来我遇到的问题是iss:有效载荷。我已将其设置为生产环境,但正在本地进行测试。一旦我更改了iss: http://localhost:12345,即使用户不在我的ASP.NET身份系统中,我也能够访问端点。

所以只是确认..我需要的只是我的有效载荷中的以下数据

{
  iss: "http://localhost:12345",
  name: "Company Test",
  role: "CompanyTest",
  aud: "<Audience ID of my application>",
  exp: 1485433642
}