2016-08-22 102 views
0

我的问题恰恰是,“如何令牌验证信息的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。

回答