【问题标题】:Authentication and authorization related doubts with asp.net web apiasp.net web api的认证授权相关疑问
【发布时间】:2014-10-05 10:50:48
【问题描述】:

我必须开始一个要在 MVC 4 和 Web API 中开发的新项目。我之前有使用 MVC 4 的经验,但是使用 Web API 这将是我的第一个项目。我知道 web api 可以被不同的平台使用。

我有一些与 web api 相关的问题。我将它们呈现给你们如下:

1) 我的第一个问题与用户身份验证有关。我查看了this SO 问题,并遵循了所选答案中给出的link1link2。我还有几个问题:

a) 当我们通过表单身份验证进行用户身份验证时,我们会创建一个 cookie,用于跟踪用户是否通过身份验证,但是使用 web api 我们不存储 cookie,而是在内容标头中传递用户凭据。我没有得到在这种情况下如何跟踪用户的登录状态?

b) 我的另一个担忧与限制未经授权的访问有关,如果我没记错的话,我想我可以在上面提供的链接 1 和链接 2 中找到。

c)我也查看了 Edward Brey 的答案(在同一个 SO 问题中)以进行身份​​验证,但我并没有完全理解这个想法。

2) 我的第二个疑问是关于混合表单身份验证和基本 Http 身份验证。是否有可能登录时我使用表单身份验证,然后使用 web api 我使用基本的 http 身份验证?如果是,请指导我。

我的问题可能听起来不恰当,但请多多包涵

【问题讨论】:

    标签: asp.net asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    1.a) Restful API 是无状态的,因此您无需跟踪用户的登录状态,而是发送已针对每个请求进行验证的凭据

    1.b) 是的,如果没有的话,网上有很多关于此的文章。授权过滤器可以帮助您实现这一目标。

    1.c) 简而言之,他提到了在执行 API 中的任何方法之前授权用户的简单逻辑。在执行控制器中的任何方法之前调用EnsureAuthenticated,或者将该逻辑放入您的授权过滤器中。

    2) 是的,你可以做到。在 Restful API 中,每个调用都可以是一个新实例,您可以通过 api 请求传递凭据。

    如果您讨论您提供的链接 1,您将看到:

    在我们的具体情况下,服务器通过编码生成身份验证令牌 连接的用户名和密码为 Base64(与什么相反 在文章中描述)并通过 执行“登录”操作时的 HTTP 标头。那时的客户 存储此身份验证令牌并将其与每个后续请求一起发送 需要它。

    如果身份验证令牌的格式是众所周知的(就我而言), 您也可以自己在客户端上生成并发送 无需服务器执行此工作。

    您可以使用您的登录信息为客户端生成一个身份验证令牌,您可以使用该令牌发送附加到您的 Web api 请求。

    【讨论】:

    • 感谢关西的回复。您能否告诉我一个问题:2,当表单身份验证完成时,将用户凭据传递给 web api 的最佳方式是什么?或者您可以建议的任何其他替代方式?
    • 我已经更新了答案。让我知道这是否有帮助,但我反对在每个请求中传递凭据,所以如果您以其他方式生成令牌会更好,例如您的用户名密码组合的哈希值。
    • 太棒了!!。我正在考虑 Session 变量,但是将令牌存储到会话中,例如 Session["token"]={encrypted token};好主意?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 2015-03-04
    • 2020-01-12
    • 2019-01-09
    • 2012-09-10
    相关资源
    最近更新 更多