【问题标题】:What's the best practice for APIs authentication?API 身份验证的最佳实践是什么?
【发布时间】:2017-06-26 04:24:06
【问题描述】:

我想为我的 Web API 构建基于令牌的身份验证,以让第 3 方应用程序访问这些 API。

没有用户交互,没有委托,角色和连接的应用程序都是从管理门户手动管理的。

根据这些要求,获取 jwt 令牌的最佳做法是什么?

我是否需要像 OpenID 或 OAuth2 这样的协议,或者只是公开一个接受 APIKey 的 Endpoint,如果 APIKey 有效,它将返回一个安全令牌?

【问题讨论】:

  • 最好的方法是与第 3 方应用程序和第 3 方本身共享密钥,以根据密钥从他们这边构建 JWT,您的 api 只需验证令牌。
  • @CuongLe 您能否添加您的评论作为讨论的答案?
  • 我的评论真的能解决你的问题吗?
  • 如果您需要连接第 3 方,您可能需要一个“标准/事实”系统,而不是自定义系统。此外,在您设计 API(两足与三足 OAuth2 等)时,应用程序到应用程序与最终用户到应用程序的要求是基本要求。我建议你从google的做事方式中汲取灵感:developers.google.com/identity/protocols/OAuth2ServiceAccount你只有客户端(json/rest),但它可以很好地理解你应该在服务器端做什么。
  • @SimonMourier 感谢您的链接。我的 scanrio 是代表用户登录,但使用服务器到服务器的身份验证。当用户批准访问他/她的数据时,OAuth2 和 OpenID 似乎很棒

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


【解决方案1】:

首先,我想解释一下 OAuth 和 OpenID 之间的区别。用户adrianbanks 在此answer 中很好地对比了两者。总而言之,OpenID 是关于身份验证——证明你是谁。虽然 OAuth 是关于授权 - 您是否有权访问功能、数据和您的应用程序。现在,回到你的问题。

无论您是否需要 OAuth,您都应该查看 OWIN (Open Web Interface for .NET) 中间件。我们目前正在使用 OWIN 来实现我们自己的开放 API 及其OAuth 2.0 Authorization Server 功能。但是,OWIN 不限于实现 OAuth 身份验证服务器。一定要看看它是否能满足您的需求。

对于您的情况,可能不需要实施 OAuth 2.0;但是,这是我推荐的。对于这个问题,它是一个好的、安全的解决方案。它不仅会解决这个问题,而且在未来,如果您想允许用户授权第三方集成,OAuth - 更安全的选项 - 将已经实施。

如果您没有用户使用第三方集成,您可以使用 API 密钥。只要您以安全的方式实现它,这是一个不错的选择。如果您正在寻找更多内容,请阅读post,了解如何使用 API 密钥安全地对 ASP.NET Web API 项目的第三方应用程序进行身份验证(和授权)。

【讨论】:

【解决方案2】:

所以,我知道您的要求是机器对机器的通信。 如果是,最简单的方法是实现“OAuth 2.0 的客户端凭据授予流程”(请参阅​​:documentation)。

仅当您的数据不包含高度敏感的数据时,上述方法才适用。

其他选项是使用自己的代码或使用 3rd 方框架来实现整个授权服务器,并遵循“OAuth 2.0 的授权代码授予流程”(请参阅​​:documentation)。

这个选项会很贵,我推荐第一个。

【讨论】:

  • 在授权流程中,client_credentials 应该是用户名/密码还是客户端 ID/客户端密码,或者类似 apikey 的任何内容?
  • 授权代码授予流程的用户名/密码和客户端凭据授予流程的客户端 ID/客户端密码。在我的回答中提到的 RFC 文档链接中对此进行了很好的解释。
【解决方案3】:

我建议您使用单独的身份验证服务器,以便您的管理、身份验证和授权与逻辑/UI 分开保存。

一个好的做法是https://github.com/IdentityServer/IdentityServer3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 2014-01-23
    • 2013-01-17
    • 2014-06-23
    • 1970-01-01
    • 2017-09-03
    • 2013-04-29
    • 2011-08-17
    相关资源
    最近更新 更多