【问题标题】:ASP .NET WebAPI default OWIN authentication - help clear things upASP .NET WebAPI 默认 OWIN 身份验证 - 帮助解决问题
【发布时间】:2014-10-19 09:31:18
【问题描述】:

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

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

  2. 1234563再说一遍:首先想到的是将它们存储在令牌中。但是,如果数据变大,每个请求发送的开销不是太大(加上标头本身的大小可能受到限制)?第二件事是使用外部 OAuth 服务(如 Facebook 或 Twitter)——如果用户使用外部令牌进行身份验证,我无法控制它包含哪些信息。另一种方法是每次都从数据库中获取我需要的数据,但这不是不好的做法吗?每个请求都需要一个额外的数据库调用来收集用户的角色并检查他是否甚至可以访问应用程序的这个特定部分。我可以将它存储在会话中,但 RESTful API 应该是无状态的。

感谢您的帮助,因为我刚刚开始深入研究 OAuth 和 WebAPI 身份验证。我知道我可以根据需要自定义所有内容(因此使用会话来存储用户数据等),但我想知道什么是好的做法,以及哪些是开箱即用的默认 WebAPI 项目VS2013,需要手动实现。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 在自己花了很多时间试图弄清楚这一切之后,我决定重写 authorize 属性来检查角色。颁发令牌时,我的用户详细信息将被缓存。用户详细信息将由令牌+IP 复合值(可能是它的哈希值)作为键控。运行授权时,我将查找这些值并根据需要在我的 web api 中处理操作。
    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2013-01-24
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多