繁体   English   中英

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

[英]Implementing JWT authentication in Asp.net WebApi using Microsoft System.IdentityModel.Tokens.Jwt

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

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

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

C)有人说密钥是在每个会话中新鲜生成的:

我将具体说明我认为该如何完成或可以完成。

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

2)Api从数据库验证凭证并创建JWT。

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

4)然后创建索赔/净荷部分,并将该用户的唯一标识符嵌入其中。

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

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

7)该JWT发送回应用程序。

8)在下一个请求期间,App尝试访问资源时,将此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。

您的问题在本主题中非常笼统,需要回答很多页。 请看一下: 使用Owin的ASP.NET Web API 2中的JSON Web令牌,它将回答您的许多问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM