什么是API身份验证的最佳做法?

时间:2017-02-08 13:54:04

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

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

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

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

我是否需要OpenID或OAuth2之类的协议,或者只是公开一个带有APIKey的端点,如果APIKey有效,它将返回一个安全令牌?

3 个答案:

答案 0 :(得分:6)

首先,我想解释OAuth和OpenID之间的区别。用户adrianbanks在这个answer中对比了两个。总而言之,OpenID是关于身份验证 - 证明你是谁。虽然OAuth涉及授权 - 您是否可以访问功能,数据和应用程序。现在,回到你的问题。

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

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

如果您没有使用第三方集成的用户,则可以使用API​​密钥。只要您以安全方式实现它,这是一个不错的选择。如果这更符合您的要求,请阅读此post,了解如何使用API​​密钥安全地验证(和授权)ASP.NET Web API项目的第三方应用程序。

答案 1 :(得分:2)

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

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

其他选项是使用自己的代码或使用第三方框架实现整个授权服务器,并遵循OAuth 2.0的授权代码授权流程" (参见:documentation)。

这个选项价格昂贵,我推荐第一个。

答案 2 :(得分:1)

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

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