Asp.net web api 生成安全访问令牌

Asp.net web api 生成安全访问令牌,asp.net-web-api,oauth-2.0,Asp.net Web Api,Oauth 2.0,我使用OAuth进行身份验证,为用户生成安全访问令牌的最佳方法是什么?您应该将访问令牌存储在数据库中,还是每次请求时都生成一个新的令牌 我使用的是承载令牌。访问令牌不需要存储在持久存储中。另一方面,刷新令牌通常会这样做。当使用Microsoft.asp.Identity libs时,asp.net web API中实现的一个常见场景是,在请求时生成access_令牌,其方式与使用FormsAuthentication成功登录后将Cookie发送回客户端的方式相同 访问令牌是一个序列化的Claim

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


我使用的是承载令牌。

访问令牌不需要存储在持久存储中。另一方面,刷新令牌通常会这样做。当使用Microsoft.asp.Identity libs时,asp.net web API中实现的一个常见场景是,在请求时生成access_令牌,其方式与使用FormsAuthentication成功登录后将Cookie发送回客户端的方式相同

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

每次客户端向API发出请求时,或多或少都会出现一个Authorize头 Authorize:Bearer asdfdsgwe…….您的_ACCESS_令牌…….2334sdfs==服务器只需要从base64-ed字符串中获取字节[],然后使用机器密钥解密,最后反序列化回IPrincipal。此过程发生在WebAPI生命周期的早期,并填充System.Threading.Thread.CurrentPrincipal

也就是说,access_令牌本身包含识别当前用户的所有必要信息,而无需返回数据库

更新 如果您对使用Microsoft.Asp.Identity为您创建access\U令牌不感兴趣。然后,我建议使用来滚动您自己的实现。请记住,这不是一项容易的任务。还可以查看thinktecture的优秀开源参考实现:

希望这有帮助