Authentication ASP.NETWebAPI默认OWIN身份验证-帮助解决问题

Authentication ASP.NETWebAPI默认OWIN身份验证-帮助解决问题,authentication,asp.net-web-api,oauth-2.0,owin,Authentication,Asp.net Web Api,Oauth 2.0,Owin,我有一些关于WebAPI和OWIN的一般/如何工作的内部问题(具体来说,是在VS2013中创建新WebAPI项目并选择个人用户帐户身份验证时设置的默认配置)。我这样做了,然后我注册(使用jQuery post),甚至登录(接收到我包含在授权头中的令牌,接收对受保护资源的访问。我只是有一些关于它的更多问题: 我的数据是否存储在身份验证令牌中?我知道我的密码不是,但令牌是否包含加密数据,或者只是一个随机字符串?这是我唯一能想到的两个选项:任一令牌都包含加密数据(用户ID、过期日期等)服务器应用程序对

我有一些关于WebAPI和OWIN的一般/如何工作的内部问题(具体来说,是在VS2013中创建新WebAPI项目并选择个人用户帐户身份验证时设置的默认配置)。我这样做了,然后我注册(使用jQuery post),甚至登录(接收到我包含在授权头中的令牌,接收对受保护资源的访问。我只是有一些关于它的更多问题:

  • 我的数据是否存储在身份验证令牌中?我知道我的密码不是,但令牌是否包含加密数据,或者只是一个随机字符串?这是我唯一能想到的两个选项:任一令牌都包含加密数据(用户ID、过期日期等)服务器应用程序对其进行解密并授予我对资源的访问权,或者令牌是一个随机字符串,所有用户数据都存储在服务器上(令牌被用作获取正确用户数据输入的密钥)。如果第二个理论是对的,令牌用户数据查找必须存储在某个地方-可能是会话、缓存还是数据库

  • 如果我想制作一个RESTful API,那么角色等呢(一般来说,除了每个请求所需的简单身份识别之外的数据)?再说一遍:首先想到的是将它们存储在令牌中。但是如果数据变大,发送每个请求的开销不是太大吗(加上标题本身可能大小有限)?第二件事是使用外部OAuth服务(如Facebook或Twitter)-如果用户使用外部令牌进行身份验证,我无法控制它包含哪些信息。另一种方法是每次都从数据库获取我需要的数据,但这不是一种坏做法吗?每个请求都需要一个额外的数据库调用来收集用户的角色,并检查他是否有权访问应用程序的此特定部分。我uld将其存储在会话中,但RESTful API应该是无状态的

  • 感谢您的帮助,因为我刚刚开始深入了解OAuth和WebAPI身份验证。我知道我可以自定义所有内容,以便按照我的需要工作(因此使用会话存储用户数据等),但我想知道哪些是好的实践,哪些是VS2013中默认WebAPI项目提供的现成实践,哪些需要手动实现。

    (1)后者是正确的。服务器通过机器密钥验证令牌,并可以破译和验证其内容


    (2) 你说得对。最好将令牌大小保持在最小。tbh我想看看其他人对此做了什么。(+1表示问题。)

    我自己花了很多时间试图弄清楚这一切之后,我决定覆盖authorize属性以检查角色。我的用户详细信息将在颁发令牌时缓存。用户详细信息将由令牌+IP复合值(可能是其哈希值)键入。运行“授权”时,我将查找这些值,并根据需要在web api中处理该操作。