使用Microsoft System.IdentityModel.Tokens.Jwt在Asp.net WebApi中实现JWT身份验证

时间:2016-08-22 12:13:08

标签: c# asp.net-web-api jwt restful-authentication

我的问题恰恰是" 如何在WebApi端管理令牌验证信息?"

A)每个用户都有一个唯一的密钥吗?

B)如果是,这些存储在哪里?

C)有人说每个会话都会生成密钥:O ??

我会说明我认为如何完成或可以完成。

1)App将用户名和密码发送到登录Api(WebApi的一部分)。

2)Api验证来自数据库的凭据并创建JWT。

3)创建一个标准标题,例如header = {' type':' JWT'' alg':' HMAC'}

4)然后创建声明/有效负载部分,并将该用户的唯一标识符嵌入其中。

5)然后(header.claims)是Base64URLEncoded并输入一个方法,该方法将此编码信息和密钥作为参数,并使用HMAC算法(例如)进行签名。

6)现在标题,声明,签名(在上一步中获得)与句点连接,我们得到一个JWT。

7)此JWT将被发送回App。

8)在下一次请求期间,应用程序在尝试访问资源时将此JWT发送回WebApi。

9)WebApi检查JWT并解码标题,并从中声明。

10)WebApi从声明中获取唯一用户标识符,并检查数据库中是否存在此用户。

11)如果找到用户,则获得与用户相关联的密钥,该密钥也存储在数据库中而不是用户。 (可能只是注册时生成的GUID)

12)它检查令牌是否过期。此信息可在声明/有效负载中显示为' exp'日期时间或其他。

13)假设令牌尚未到期,WebApi将获取标题加上声明/有效负载,并再次使用密钥生成JWT,就像上次使用密钥一样。

14)这样创建的JWT与App发送的JWT相匹配。如果两者都匹配(签名),那么令牌是正确的,没有调和,并且确实由WebApi发布给该用户。

15)WebApi设置声明标识并允许访问资源。

现在,WebApi也可以在登录时保留静态的用户标识符,而不是每次都在数据库中查找用户标识符。所以它可以从这个数组中获取信息。当用户注销时,用户也会从静态数组中删除。(数组管理不是我现在想要进入的)

这只是我考虑实施它的方式。

我想知道我有多少偏离了它的方式?我不想创建一个单独的授权服务器。我希望WebApi以简单但当然安全的方式管理它本身。我将使用Microsoft JwtSecurityTokenHandler for .Net 4.5来创建,验证JWT' s。

1 个答案:

答案 0 :(得分:0)

您的问题在本主题中非常通用,需要多页回答。请查看:JSON Web Token in ASP.NET Web API 2 using Owin 它会回答你的许多问题