【问题标题】:Creating a developer API platform in ASP.NET MVC 3?在 ASP.NET MVC 3 中创建开发人员 API 平台?
【发布时间】:2011-07-27 08:29:21
【问题描述】:

我正在构建一个具有 www 前端 (www.example.com) 和开发人员 API (api.example.com) 的 ASP.NET MVC 3 应用程序。我想为开发人员提供一个简单的服务,他们可以在其中注册密钥并使用它进行 REST 调用。我不清楚一些事情:

1) 我应该如何生成和存储密钥?是否可以将它们以纯文本形式存储在数据库中,或者我应该对它们进行哈希和加盐?

2) 如何授权 API 调用?我猜我不想通过 ASP.NET Membership 这样做。

一旦我理解了这两个问题,诸如速率限制之类的事情似乎就很简单了。

【问题讨论】:

    标签: api rest asp.net-mvc-3 restful-authentication


    【解决方案1】:

    1) 这完全取决于您。我已经看到它在我使用过的不同 API 中完全不同。一些键与 GUID 非常相似,其他键显然只是随机字符串,但重要的是它们是独一无二的,不容易猜到。至于您如何将其存储在数据库中,您为保护数据付出了多少努力实际上取决于用户帐户的敏感程度。如果您提供的服务的性质是高度机密的和/或您最终可能会被审计,那么您应该采取任何必要的手段来保护数据(使用单向哈希和加盐)。我个人的理念是让事情尽可能简单,直到有理由引入额外的复杂性,但我曾在使用 1-way hashing 和 salts 进行身份验证的网站上工作过。

    2) 这取决于谁将使用您的服务。您可以使用内置的 ASP.NET Forms Authentication Membership Provider,甚至将其与您的公共网站集成,但这将限制使用支持 HttpProxies 上的 cookie 的平台的开发人员使用您的 API,并使您的 API 更难跟随。我使用过的大多数 REST-ful 服务都使用了基本身份验证和 SSL 的组合,这将提供最广泛的开发人员支持,但在您这边实现起来会更加复杂。在服务器端,您必须从 HTTP 标头中捕获用户凭据,并根据您的用户数据库对其进行身份验证。

    【讨论】:

    • 谢谢乔尔。我当然认为我想使用标准的基本身份验证加 SSL 方法。所以我想这意味着我需要获得 SSL 证书?
    • 是的,当然,否则在使用基本身份验证时,用户名和密码将不加密发送。您可以使用免费的自生成证书,但某些框架非常挑剔,如果它生成 SSL 警告,则不允许完成请求,因此您真的应该只在临时或开发环境中这样做。在您的开发环境中,您可以手动将自行生成的证书添加到您的受信任证书中,以避免计算机上出现 SSL 警告。
    • 好的,但是对于开发人员对 API 进行客户端 javascript 调用,这是行不通的。据我了解,您需要生成一个自定义签名,该签名基本上是您的私钥和会话开始时间的哈希值。对吗?
    • 另外,我想我可以说 API 开发人员只需要在他的服务器端为我的服务编写一个包装器。这看起来真的很不雅。
    猜你喜欢
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多