HTTP基本身份验证+访问令牌?

时间:2014-10-22 07:43:27

标签: security authentication oauth oauth-2.0 basic-authentication

我正在开发一个REST API,我打算使用Web和IOS应用程序。我打算让这个API私有化一段时间(私人意思是我只希望我的网络应用程序和ios应用程序访问api)。

我已阅读过许多不同的身份验证方法,但我仍然很难为我的API选择合适的身份验证方法。

根据我的理解,oAuth2允许用户使用其他服务提供商登录您的APP,以便您可以访问相应服务提供商的数据。我在自己的API中访问数据,所以我认为这不适用于我?

所以,这就是我的想法:

  • 1)使用HTTP基本身份验证将用户/传递发送到服务器。

  • 2)服务器验证登录后,返回一个将在x小时后过期的访问令牌。这将允许我简单地存储令牌而不是用户/传递凭证。

我有谷歌这种技术,并没有真正找到任何关于这种方法的信息,这让我相信这不是一个好方法,因为我可能会尝试重新发明一些东西?

我该怎么办?我正在寻找两条腿的oAuth?

2 个答案:

答案 0 :(得分:2)

OAuth 2.0已成为保护网络API的首选协议。它要求用户授权应用程序访问您的Web API。

您希望您的应用程序成为唯一可以访问某些API的应用程序。 OAuth 2.0允许这样做。

在授权服务器中,使用所需的客户端凭据(不是可选的)实施Authorization Code Grant。使其成为只有您的应用程序(或配置列表操作第一方应用程序)才能获得进行这些API调用所需的范围。只要您确实对您的客户保密,您的应用程序将是唯一一个能够获得具有所需范围的访问令牌的应用程序。在Web API中,确保将范围授予用于调用API的访问令牌。

良好的授权服务器(例如The Identity Hub)将允许您这样做。

请勿使用Resource Owner Password Credentials Grant。正如规范所说:

  

凭证只应在有高价时使用      资源所有者和客户之间的信任程度(例如,      客户端是设备操作系统的一部分或具有高权限      应用程序),以及其他授权授权类型时      可用(例如授权码)。

重复later on

  

授权服务器应特别小心      启用此授权类型,仅在其他流不支持时才允许      可行的。

如果密码凭据授权可用,则任何应用程序都可以通过询问用户用户ID和密码来获取令牌。这正是你不想要的。

关于使用密码固有问题的规范is very clear

  

在传统的客户端 - 服务器身份验证模型中,客户端      请求访问受限资源(受保护资源)      服务器使用资源所有者通过服务器进行身份验证      证书。为了提供第三方应用程序访问权限      受限资源,资源所有者与其共享其凭据      第三方。这会产生一些问题和限制

OAuth 2.0专门用于克服使用密码的一些问题:

  

OAuth通过引入授权层来解决这些问题      并将客户端的角色与资源的角色分开      所有者。在OAuth中,客户端请求访问受控资源      由资源所有者和资源服务器托管,是      发布了一组不同于资源的凭据      所有者。

此外,如果您的API想要了解用户(除了知道客户端应用程序之外),也不可能滥用资源所有者密码凭据授权来验证客户端(即应用程序)而不是资源所有者(即用户) ),正如Florent Morselli所建议的那样。

答案 1 :(得分:1)

事实上,OAuth2并非专门用于验证您的用户,而是授权客户(网站或应用)访问资源(用户信息,页面,文件......)。

由于您的网站和应用是私有的(因此您对它们有很高的信任度),我建议您使用Resource Owner Password Credentials授权类型。 用户名/密码仅用于获取访问令牌(如果需要,还需要刷新令牌)。您提到的客户不必存储这些凭据。

只是一个精度:OAuth2可以用于HTTP基本身份验证to authenticate the client,而不是资源所有者/用户。