我有一些关于WebAPI和OWIN的常规/工作内部问题(具体来说,是在VS2013中创建新的WebAPI项目并选择个人用户帐户身份验证时设置的默认配置)。我这样做了,然后我注册了(使用jQuery帖子)甚至登录(收到令牌,我包含在授权标题中,接收对受保护资源的访问权限。我只是有一些问题:
我的数据是否存储在身份验证令牌中?我知道我的密码不是,但是包含加密数据的令牌,或者只是一个随机字符串?这些是我能想到的唯一两个选项:令牌包含加密数据(userId,到期日期等),服务器应用解密它并授予我对资源的访问权限,或者令牌是随机字符串并且存储所有用户数据在服务器上(令牌用作获取正确用户数据条目的密钥)。如果第二种理论是正确的,则令牌< - > userData查找必须存储在某个地方 - 是会话,缓存还是数据库?
如果我想制作一个RESTful API,那么角色等等(一般来说 - 数据超出了我对每个请求所需的简单身份识别者身份)?再说一遍:首先想到的是将它们存储在令牌中。但是,如果数据增长很大,那么每个请求发送的开销不会太大(加上标题本身可能是有限的)?第二件事是使用外部OAuth服务(如Facebook或Twitter) - 如果用户使用外部令牌进行身份验证,我无法控制它包含哪些信息。另一种方法是每次从数据库中获取我需要的数据,但这不是不好的做法吗?每个请求都需要额外的数据库调用来收集用户的角色,并检查他是否可以访问这个特定的应用程序部分。我可以将它存储在会话中,但RESTful API应该是无状态的。
感谢您提供任何帮助,因为我刚刚开始深入挖掘OAuth和WebAPI身份验证。我知道我可以根据需要自定义所有内容(因此使用会话来存储用户数据等),但我想知道哪些好的做法以及哪些是开箱即用的默认WebAPI项目VS2013需要手动实施。
答案 0 :(得分:0)
(1)后者是正确的。服务器通过机器密钥验证令牌,并可以解密和验证其内容。
(2)你说得对。最好保持令牌大小最小。我希望看到其他人正在做些什么。 (问题为+1。)