我的问题恰恰是" 如何在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。
答案 0 :(得分:0)
您的问题在本主题中非常通用,需要多页回答。请查看:JSON Web Token in ASP.NET Web API 2 using Owin 它会回答你的许多问题