我有一个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令牌时遗漏了这些值,因为我没有将访问权限绑定到特定帐户。我只是想创建一个持久的令牌,外部公司可以使用而无需登录。
答案 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
}