我的问题恰恰是,“如何令牌验证信息的WebAPI侧管理?”实施JWT认证在Asp.net的WebAPI
即
一)每个用户是否有唯一的密钥?
B)如果是,这些存储在哪里?
C)有人说,关键是每个会话新鲜产生:O ??
我指定我怎么觉得这是必须要做的还是可以做到的。
1)应用程序发送用户名和密码登录阿比的WebAPI的(部分)。
2)Api验证来自数据库的凭据并创建JWT。
3)创建一个标准头说头= { '类型': 'JWT', 'ALG': 'HMAC'}。
4)然后创建索赔/有效负载部分,并将该用户的唯一标识符嵌入到其中。
5)然后(header.claims)被Base64URLEncoded并送入这需要对这类已编码的信息和秘密密钥作为参数,并使用HMAC算法(比如说)标记它的方法。
6)现在头部,声明,签名(在前面的步骤中获得)与句点连接,我们得到一个JWT。
7)此JWT被发送回应用程序。
8)在下次请求期间,应用程序在尝试访问资源时将此JWT发送回WebApi。
9)WebApi检查智威汤逊和解码头,声称它。
10)WebApi从声明中获取唯一用户标识符,并检查该用户是否存在于数据库中。
11)如果找到用户,它将获得与用户相关联的密钥,这个密钥也存储在数据库中,并对用户提供。 (可能仅仅是注册时生成的GUID)
12)它检查令牌是否过期。这个信息在索赔/有效载荷中可以看作'exp'日期时间或其他。
13)假设令牌还没有到期,需要的WebAPI的首部加上索赔/有效载荷,并再次产生它没有使用密钥之前时间的JWT方式相同。
14)创建的JWT与App发送的JWT匹配。如果两者都匹配(签名),那么令牌是正确的并且没有脾气,并且确实由WebApi发给该用户。
15)WebApi设置声明标识并允许访问资源。
现在每天寻找数据库的用户标识时间,而不是,该的WebAPI也只是维护用户的静态数组,因为他们登入保持他们的秘密密钥了。所以它只能从这个数组中获取信息。当用户注销时,用户也会从静态数组中移除(阵列管理不是我现在想要进入的)
这只是我关于实现它的思考方式。
我想知道我有多少偏离了它的做法,否则呢?我不想创建一个单独的授权服务器。我希望WebApi能够以一种简单而安全的方式管理这一点。我将使用Microsoft JwtSecurityTokenHandler进行.Net 4.5创建,验证JWT。