API身份验证的最佳实践是什么?

Hom*_*mam 5 openid authentication oauth-2.0 asp.net-web-api

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

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

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

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

M. *_*son 6

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

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

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

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


Jos*_*cis 2

所以,我理解您的需求是机器对机器的通信。如果是,最简单的方法是实施“ OAuth 2.0 的客户端凭据授予流程”(请参阅​​:文档)。

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

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

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