生成安全访问令牌

时间:2014-04-08 11:08:37

标签: asp.net-web-api oauth-2.0

我正在使用OAuth进行身份验证,为用户生成安全访问令牌的最佳方法是什么?是否应该将访问令牌存储在数据库中,或者每次请求时都生成一个新令牌?

我正在使用不记名令牌。

1 个答案:

答案 0 :(得分:0)

访问令牌不需要存储在持久存储中(另一方面通常会刷新令牌)。使用Microsoft.Asp.Identity库时,在asp.net Web API中实现的常见方案是,在使用FormsAuthentication成功登录后,Cookie以与发送回客户端相同的方式生成access_token。

访问令牌是序列化的ClaimsPrincipal,使用Asp.Net机器密钥加密,然后使用Base64-ed加密。

或多或少,每次客户端向API发出请求时都会出现“Authorize”标题(类似于 Authorize: Bearer asdfdsgwe.......YOUR_ACCESS_TOKEN........2334sdfs===)服务器只需从base64-ed字符串中获取Byte[],然后使用机器密钥解密,最后反序列化为IPrincipal。此过程在WebAPI的生命周期的早期进行,并填充System.Threading.Thread.CurrentPrincipal

即表示access_token本身包含识别当前用户的所有必要信息,而无需返回数据库。

<强>更新 如果您对使用Microsoft.Asp.Identity为您创建access_tokens不感兴趣。然后我建议使用System.IdentityModel.Tokens.Jwt Nuget Package来推广您自己的实现。请记住,这不是一件容易的事。还可以通过thinktecture查看优秀的开源参考实现:Thinktecture Identity Server v3

希望这有帮助。